0

単語部分に一致する正規表現をJavaで書くことは可能ですか? たとえば、文字列「ab」、「cd」、および「ef」を検索したいとします。次の例では、一致が返されます。

[lab stef ecde], [lecde effe aaaab]

そのため、すべての文字列 ('ab'、'cd'、'ef') がテキスト内の単語の一部である場合、一致が返されます。順序はインポートされません。ただし、いずれかの文字列が欠落している場合、一致は返されません

[lab stef]
4

3 に答える 3

6

正規表現である必要がない場合は、Tichodroma の答えが探しているものです。

しかし、あなたの生活を本当に複雑にし、正規表現を使用する必要がある場合は、先読みのようなルックアラウンドメカニズムを使用して、次のようなものを作成することができます

"lab stef ecde".matches("(?=.*ab)(?=.*cd)(?=.*ef).*") //true
"lab stef".matches("(?=.*ab)(?=.*cd)(?=.*ef).*") //false

より明確に説明するには:

(?=.*ab)(?=.*cd)(?=.*ef).*
  • (?=.*ab).*abあなたの文字列が含まれているかどうかをチェックし、部分の.*前の任意の文字と一致しますab
  • また、先読み (?=...) はゼロ幅です。つまり、先読みが開始される前の位置にカーソルがリセットされるため、この場合はまだ文字列の先頭にあります。
  • このようにして、再び使用することができ(?=.*cd)ます(?=.*ef)
  • .*ただし、最後に正規表現を含める必要もありmatchesます。文字列全体が正規表現と一致するかどうかを確認するため、何らかの方法で文字列全体を反復処理する必要があるためです。
于 2013-07-04T13:45:30.330 に答える
5

入力内のすべての部分文字列と&&結果のboolean値を検索します。

String s = "lab stef ecde";
boolean ab = s.indexOf("ab") > -1;
boolean cd = s.indexOf("cd") > -1;
boolean ef = s.indexOf("ef") > -1;
boolean match = ab && cd && ef; // true

編集

ドイツには次のことわざがあります。

Warum einfach wenn es auch kompliziert geht?

「複雑にできるのに、なぜ単純なのか?」

それが、この場合の正規表現について私が考えるものです。

于 2013-07-04T13:34:28.810 に答える