(?<!expression) 前方不一致指定(Ver8.22対応版)
目次検索系コマンド正規表現− 前方不一致指定
 前方一致指定とは反対に、前方部分が特定のパターンにヒットしないことを必要とします。例えば「xyz」の前が「abc」でない場合に「xyz」のみにヒットさせたいようなケースで使います。

 上記例では、
(?<!abc)xyz
 と指定します。

 前方不一致指定は、正規表現文字列の先頭に書く必要があります。また、前方一致指定の表記自体をカッコで囲んだり「|」などと組み合わせることは出来ません。そういう指定をしてもエラーにはなりませんが、間違った検索を実行してしまいます。

【 検索系コマンドでの次候補/下候補系コマンド実行時の注意 】

 前方一致指定と同じく、前方不一致の正規表現のマッチングも、検索開始位置として指定された位置から実行されます。それより前の部分については一致/不一致のチェックは行われません。
 例えば上の例で、「abcxyz」の「x」の部分から検索を開始してしまうとヒットしてしまいます。

【 改行文字の指定についての制限 】

 前方一致/前方不一致指定の括弧の中には改行文字を入れることが出来ません。無理矢理改行文字を入れて検索してもうまくヒットしない可能性が高いです。
 前方一致指定の中に改行文字を入れるような検索をしたい場合は、ヒットした扱いにするタグ指定複数行検索時の制限解除と、さらには後方不一致指定をうまく組み合わせる必要があります。具体的には、
(?<!abc\n)xyz
のような検索をしたい場合は、
((?!abc\n)(.*\n))(xyz)(?\2)(?#fulllinematch)
のように、後方不一致指定で無理矢理ヒットさせる等の方法を使っていただく必要があります。


戻る