8

このような質問を検索しましたが、見つかったすべてのケースは、viで!gを使用して正規表現の一致を否定したり、正規表現を否定せずに他のものを一致させたりするなど、問題固有の方法で解決されました。

したがって、私はこれに対する「純粋な」解決策に興味があります。

文字列のセットがある場合は、正規表現マッチャーを使用してそれらをフィルター処理し、特定のサブ文字列がない文字列のみを残す(一致させる)ようにする必要があります。たとえば、次の「Foo」を除外します。

Boo
Foo
Bar
FooBar
BooFooBar
Baz

結果は次のようになります。

Boo
Bar
Baz

ネガティブルックアヘッド/ビハインド(?!regex)/(?<!regex)で構築してみましたが、わかりませんでした。それも可能ですか?

4

1 に答える 1

19

この正規表現を試してください:

^(?:(?!Foo).)*$

これは一度に1文字を消費し、前方にFooがないかどうかをテストします。ネガティブな後読みでも同じことができます。

^(?:.(?<!Foo))*$

ただし、ルックアラウンドアサーションなしで同じことを行うこともできます。

^(?:[^F]*|F(?:$|[^o].|o(?:$|[^o])))*$

これは、 FまたはFの後にoが続かないか、またはoが後に別のoが続かない場合を除くすべての文字に一致します。

于 2009-12-28T10:17:59.423 に答える