aaa
で始まる行に一致する正規表現を定義しようとしていますが、xxx
は含まれていません。私。 e。これらの行と一致する:1語で始まり、別の単語が含まれていない行と一致する正規表現
をAAAのBBBのYYY
のAAA OOOのZZZ
AAA bbgdb OOO
ではなく、この:
のaaa PPP XXX
私はこれを実行しようとしました:
aaa.*?(?!xxx)
が、それはすべての言及の行と一致します。 私は何が間違っていますか?
aaa
で始まる行に一致する正規表現を定義しようとしていますが、xxx
は含まれていません。私。 e。これらの行と一致する:1語で始まり、別の単語が含まれていない行と一致する正規表現
をAAAのBBBのYYY
のAAA OOOのZZZ
AAA bbgdb OOO
ではなく、この:
のaaa PPP XXX
私はこれを実行しようとしました:
aaa.*?(?!xxx)
が、それはすべての言及の行と一致します。 私は何が間違っていますか?
あなたaaa.*?(?!xxx)
パターンは、次に、ストリング内のaaa
一致する(それを遅延定量サブパターンであるとして.*?
も試されていない)、現在位置のすぐ右にxxx
があるかどうかをチェックします。 aaa
の後に空白があるため、有効な一致が返されます。
あなたは開始時に^
アンカーを追加します(また、あなたはおそらく、パターンの開始時に、(?m)
、m
修飾子、またはそれのインラインバージョンが必要)と先読み内.*
か.*?
を置く必要があります。
^aaa(?!.*?xxx).*
^^^
regex demoを参照してください。 ^
は、appriopriate修飾子であるm
(Notepad ++のようなRubyやツールで使用されていない場合は^
がデフォルトで行頭にマッチする)の行の開始に一致させる必要があることに注意してください。
詳細
^
- ラインの開始aaa
からaaa
サブ(?!.*?xxx)
からxxx
ストリングは、他の任意の0+文字の後がある場合は試合を失敗します否定先読み改行文字よりも.*
- 行の残りの部分、0+文字以外の文字改行文字。