単語部分に一致する正規表現をJavaで書くことは可能ですか? たとえば、文字列「ab」、「cd」、および「ef」を検索したいとします。次の例では、一致が返されます。
[lab stef ecde], [lecde effe aaaab]
そのため、すべての文字列 ('ab'、'cd'、'ef') がテキスト内の単語の一部である場合、一致が返されます。順序はインポートされません。ただし、いずれかの文字列が欠落している場合、一致は返されません
[lab stef]
正規表現である必要がない場合は、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
ます。文字列全体が正規表現と一致するかどうかを確認するため、何らかの方法で文字列全体を反復処理する必要があるためです。入力内のすべての部分文字列と&&
結果の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?
「複雑にできるのに、なぜ単純なのか?」
それが、この場合の正規表現について私が考えるものです。