\1・\2 一般的正規表現互換のタグ付き正規表現(Ver7.11対応版)
目次−
検索系コマンド−
正規表現−
一般的正規表現互換のタグ付き正規表現
タグ付き正規表現とは、検索でヒットした文字列の中からタグによって指定した部分を取り出す方法です。
その文字列を置換先の文字列の一部として利用することができます。
例えば、「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文字の単語を検索することが出来ます。
【 補足 】
前方一致/不一致、後方一致/不一致指定についてはタグ付き正規表現でのカッコの対象外となります。例えば、"(abc)(?!xyz)(jre)"というパターンを指定した場合での"\2"に該当する部分は(jre)部分となります。
一般的正規表現のタグを使っている場合で、"\0"を記述すると検索文字列全体を指すことになってしまいますが、これは"\f"区切りを使った場合との互換で"\0"が使えてしまいます。一般的正規表現のタグを使う場合は"\0"は使わないように注意してください。
(参考:秀丸エディタ独自のタグ付き正規表現)