2017-09-27 15 views
1

aaaで始まる行に一致する正規表現を定義しようとしていますが、xxxは含まれていません。私。 e。これらの行と一致する:1語で始まり、別の単語が含まれていない行と一致する正規表現

をAAAのBBBのYYY

のAAA OOOのZZZ

AAA bbgdb OOO

ではなく、この:

のaaa PPP XXX

私はこれを実行しようとしました:

aaa.*?(?!xxx) 

が、それはすべての言及の行と一致します。 私は何が間違っていますか?

答えて

1

あなたaaa.*?(?!xxx)パターンは、次に、ストリング内のaaa一致する(それを遅延定量サブパターンであるとして.*?も試されていない)、現在位置のすぐ右にxxxがあるかどうかをチェックします。 aaaの後に空白があるため、有効な一致が返されます。

あなたは開始時に^アンカーを追加します(また、あなたはおそらく、パターンの開始時に、(?m)m修飾子、またはそれのインラインバージョンが必要)と先読み内.*.*?を置く必要があります。

^aaa(?!.*?xxx).* 
     ^^^ 

regex demoを参照してください。 ^は、appriopriate修飾子であるm(Notepad ++のようなRubyやツールで使用されていない場合は^がデフォルトで行頭にマッチする)の行の開始に一致させる必要があることに注意してください。

詳細

  • ^ - ラインの開始
  • aaaからaaaサブ
  • (?!.*?xxx)からxxxストリングは、他の任意の0+文字の後がある場合は試合を失敗します否定先読み改行文字よりも
  • .* - 行の残りの部分、0+文字以外の文字改行文字。

enter image description here

関連する問題