2012-02-17 8 views
0

正規表現を使用して、最大1文字の配列が見つからないようにしようとしています。たとえば、パターン "nan"とテキスト "banana"は、 "ban"と "nan"を検索したいと思います。前者は 'b'と 'n'との不一致で受け入れられます。私が抱えている問題は、私がそれらを必要とする場所に個々のワイルドカードを挿入することにせずに、正規表現のパターンを作ることです。Regexでの文字列検索

final String[] patterns = {"[a-z]an", "n[a-z]n", "na[a-z]"}; 
    final String text = "banana"; 

    for(String pattern : patterns) 
    { 
     Pattern p = Pattern.compile(pattern); 
     Matcher m = p.matcher(text); 

     while(m.find()) 
     { 
      System.out.println(m.start() + " " + m.group()); 
     } 
    } 

は私が(いくつかの重複はあるものの)欲しいものを得るの不格好な方法の一種であるテストとしてあるものです。このような文字列の場合、単一の不一致で検索するのは正規表現であり、HorspoolやKMPのような従来のアルゴリズムを変更しようとするとよいでしょうか?

答えて

0

残念なことに正規表現は、一致させようとしているパターンで非常に正確にできるように設計されていますが、逆に近似マッチのサポートはほとんどありません。しかし、TREライブラリはこの目的のために正確に設計されています(http://laurikari.net/tre/