English help on website



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

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

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

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

【 繰り返し指定について 】
 現在の秀丸エディタでは、前方一致/不一致指定の中に「*」や「+」を使った繰り返し指定を使うことが出来ますが、他の正規表現プログラムでは繰り返し指定は使えないことが多いです。また、秀丸エディタの古いバージョンの場合や、他の正規表現ライブラリ(hmonig.dll等)を指定している場合は制限が発生します。


【 改行文字の指定についての制限 】
 秀丸エディタのVersion 8.56以降(およびHmJre.dllのVersion 4.12以降)から、前方一致/不一致の中に改行文字を含めることが出来ない制限は無くなりました。しかし、前方一致/前方不一致の中が改行にヒットするためには、(?#fulllinematch)もセットで指定する必要があります。

 前方一致/前方不一致指定の中で[^...]のような表現と(?#maxlines:2)のような指定をして改行文字にヒットさせたい場合も同様に、(?#fulllinematch)が必要になります。

参照:複数行検索時の制限解除

【 強調表示での制限 】
 強調表示の場合は、前方一致/前方不一致のパターンが検索開始位置よりも前にヒットさせることが出来ない制限があります。
 V8.89以降では、(?#lookbehind)を記述すると制限が解除されます。

参照:強調表示の前方一致/前方不一致の制限解除