2

私は PHP を使用していますpreg_match- または または または の両方が存在するかどうかを確認するにはどうすればよいfooですか。明らかに、次のようなものは機能しますが、十分に複雑な場合は、それらを 2 回記述しないことを非常に好みます。barfoobarbarfoosomething bar that foofoo.*bar|bar.*foofoobar

4

2 に答える 2

5

テストのみの場合は、2 つのチェックを簡単に行うことができfooますbar

それ以外の場合、単一の正規表現でそれが必要な場合は、肯定的な先読みを利用できます。

(?=.*foo)(?=.*bar)

それぞれが、正規表現ポインターがある場所から任意の文字 ( ) を含む文字列内のどこかfooにそれぞれあることを確認します。bar.*

編集:また、パフォーマンスのために、行頭アンカーを追加して、文字列内にいずれかまたは両方の単語が含まれていない場合に、文字列内のすべての位置をチェックする必要がないようにすることができます。

^(?=.*foo)(?=.*bar)
于 2013-09-07T10:58:34.797 に答える
0

/^(?=.*?foo).*?bar/2 番目のアサーションは単なるオーバーヘッドであり、これで十分だと思います。また、文字列がテキスト内にあることが予想される場合は、貪欲でない形式を使用することをお勧めします。また、ドットは改行以外の文字にのみ一致することに注意してください。これは、複数行の文字列では問題になる可能性があります。

于 2013-09-21T07:49:45.113 に答える