\nを使った複数行検索の際の制限について(Ver8.89対応版)
目次検索系コマンド正規表現− \nを使った複数行検索の際の制限について
 秀丸エディタでは、検索文字列に\nを含めて正規表現を使うことにより、複数行にまたがる文字列を検索することができます。

 例えば、「これは\n秀丸エディタです$」という検索文字列を指定すれば、
これは
秀丸エディタです
という2行を見つけだすことができます。

 秀丸エディタでは検索元文字列の中に「\n」と改行コードがいくつ含まれているかを計算し、その数+1の行まで検索でヒット可能にします。そういう特殊な仕組みのため、\n自体を任意の回数繰り返すような正規表現は、期待通りに動作しないことがあります。

 例えば、「\n+」という正規表現は、秀丸エディタでは\nが1つ含まれているものと解釈し、2行単位で検索処理します。したがって、空行が3行連続していても、そのうちの2行分にしかヒットしません。ご注意ください。
 (V8.00以降では(?#maxlines:数値)という記述を書くことで回避可能)

 また、\nを使った検索は秀丸エディタに負荷がかかって遅くなるので、もし「$」で置き換え可能な場合にはなるべく「$」を使うようにしてください。

 ちなみに、強調表示で指定する文字列の中には\nは使えません。(強調表示は複数行に対応してません)


 タグ付き正規表現などで、改行以降にヒットするような検索文字列の場合はヒットしないようになっています。
 例えば、「(これは)\n(秀丸エディタです)(?\2)」という検索文字列の場合、
これは
秀丸エディタです
という2行のうち2行目にヒットすることが期待されますが、実際にはヒットしないように抑制されています。
 (V8.00以降では(?#fulllinematch)という記述を書くことで回避可能)


V8.00以降
 V8.00以降では、検索文字列内にコメントを書くことでこれらの制限を取り払うことができるようになりました。
 このコメントによる制御は正規表現DLLの解釈ではなくて秀丸エディタ本体による独自の解釈で、正規表現の文法には含まれません。
(?#maxlines:数値)
 検索文字列に「(?#maxlines:数値)」というような記述が含まれていると、指定された数値の行数までをバッファに取り込んで検索します。
 例えば、「(?#maxlines:10)\n+」という検索文字列の場合、連続した改行10個までを検索できます。

(?#fulllinematch)
 検索文字列に「(?#fulllinematch)」という記述が含まれていると、2行目以降にのみヒットするようなパターンの抑制が解除されます。
 ただし、上下検索で同じ結果が得られない場合が出てくるので注意が必要です。

不都合の出る例その1:
検索文字列「(?#fulllinematch)(a)\n(a)(?\2)」で、

a
a
a
a
a

というテキストで上下検索の結果が違うようになります。

不都合の出る例その2:
検索文字列「(?#fulllinematch)aaa\nb*」で、

xxx
aaa
bbb

というテキストで最初の検索では上2行だけが対象となり、bbbの行がマッチしなくなります。


戻る