English help on website



(?<=expression) 前方一致指定(Ver9.34対応版)
目次コマンド検索系コマンド正規表現− 前方一致指定
 特定の正規表現パターンの前に、さらに特定の正規表現パターンが存在していることを指定しつつ、正規表現にヒットする文字列としては後方部分のみとするような指定が出来ます。
 例えば、「abcxyz」という文字列を検索しつつ、ヒットする文字としては「xyz」だけにしたいようなケースに使います。強調表示や置換の時に使うと便利です。

 例えば「abc」の後に「xyz」が続きつつ、ヒットする文字列は「xyz」だけにしたい場合は、
(?<=abc)xyz
 と指定します。

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

【 検索系コマンドでの次候補/下候補系コマンド実行時の注意 】
 Version 3.xx以下のHmJre.dllでは、例えば「abcxyz」の「b」にカーソルがある状態で「(?<=abc)xyz」を検索してもヒットしないといった制限、つまり、前方一致指定のパターンが検索開始位置よりも前にヒットさせることが出来ない制限がありました。これについてはV4.00以降から廃止されて、うまくヒットするようになりました。
 ただし、秀丸エディタの強調表示の中ではこれ(検索開始位置のバックトラック)が効かないようにあえてやっているので、場合によっては期待した動作にならないことがありえます。(速度的な問題であえてそうしています)V8.89以降では、(?#lookbehind)を記述すると制限が解除されます。

 秀丸エディタV8.33からHmJre.dll V4.00以降を添付しています。

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


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

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

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

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

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