English help on website



\1・\2...、\g{数字}、\g{-数字} 一般的正規表現互換のタグ付き正規表現(Ver9.35対応版)
目次コマンド検索系コマンド正規表現− 一般的正規表現互換のタグ付き正規表現
 タグ付き正規表現とは、検索でヒットした文字列の中からタグによって指定した部分を取り出す方法です。
 その文字列を置換先の文字列の一部として利用することができます。
 例えば、「AさんはBさんの友達です」というような文章を、「BさんはAさんの友達です」のように変換したい場合、従来はマクロでも使わないと自動で処理することはできませんでした。しかし、タグ付き正規表現による置換を使えば、一発で変換することができます。

 先ほどの例の場合だと、
検索文字列:(.+)さんは(.+)さんの友達です
置換文字列:\2さんは\1さんの友達です

 とすることで、「A」と「B」に相当する部分の入れ替えができます。

 Perl等でのタグ付き正規表現では、カッコを使ってターゲットを指定する形になっています。
 そのPerl等と同じ方式のタグ指定が、HmJre.dllでも出来ます。
 こっちの方式でタグ指定する場合は、その指定されたタグを検索パターンの中に入れることも出来ます。
 こちらのやり方としては、タグ指定したい部分をカッコで囲みます。例えば、英数字と数字の組み合わせを検索しつつ、そのヒットした部分の数字の部分だけをタグ指定したい場合は、その数字に相当する部分をカッコで囲みます。
[a-z]+([0-9]+)
 のように指定します。そして、タグとしては、\1というのが数字の部分に相当することになります。または、
([a-z]+)([0-9]+)
 のようなパターンを指定した場合は、英字の部分が\1になり、数字の部分が\2となります。

 タグの対象となるのはあくまで一番ネストの浅いカッコだけなので、例えば、
(aaa|(bbb|ccc))
 と指定した場合には、それ全体が\1に相当し、\2、\3に該当する物は存在しないことになります。

 「\1」等を検索文字列の中に入れることも出来ます。例えば、
\<([a-z])((?!\1)[a-z])\2\>
 と指定すると、"see"や"all"のような、1文字目と2文字目は一致しないけども2文字目と3文字目が一致する3文字の単語を検索することが出来ます。

 HmJre.dllのVersion 4.13と秀丸エディタのVersion 8.58以降を組み合わせる場合には、タグの番号として15番までが指定できるようになりました。「\1〜\9」では9番までしか指定できないので、それとは別に、Perlと同じく「\g{数字}」および「\g{-数字}」の方式を採用しました。例えば
\g{10}
\g{-1}
 のような指定をします。例えば
(a+)(b+)(c+)(d+)(e+)(f+)(g+)(h+)(i+)(j+)
の (j+) 部分は、 \g{10} と表現して、置換が実行できます。
検索文字列の中で\gを使う場合、中の番号に負の数を指定すると、相対位置でタグを指定することが出来ます。例えば\g{-1}は、1つ前の括弧を対象とします。
(a+)(b+)\g{-2}
 の「\g{-2}」部分は(a+)部分に相当します。

【 補足 】

 前方一致/不一致、後方一致/不一致指定についてはタグ付き正規表現でのカッコの対象外となります。例えば、"(abc)(?!xyz)(jre)"というパターンを指定した場合での"\2"に該当する部分は(jre)部分となります。

 一般的正規表現のタグを使っている場合で、"\0"を記述すると検索文字列全体を指すことになってしまいますが、これは"\f"区切りを使った場合との互換で"\0"が使えてしまいます。一般的正規表現のタグを使う場合は"\0"は使わないように注意してください。

【 補足2 】

他のアプリの正規表現で、括弧のタグを$1や$2で書く場合がありますが、秀丸エディタのHmJre.dllでは、$1や$2といった書き方は使えません。
Web検索して見つかるような正規表現の例で$1や$2がある場合は、秀丸エディタ向けに\1や\2と読み替えるとそのまま使える場合があります。



(参考:秀丸エディタ独自のタグ付き正規表現