秀丸エディタ独自のタグ付き正規表現(Ver9.35対応版)
目次−
コマンド−
検索系コマンド−
正規表現−
秀丸エディタ独自のタグ付き正規表現
\fは秀丸エディタ独自の形式です。
HmJre.dll V1.50からは一般的正規表現互換の()を使ったタグ付き正規表現が使用可能ですので
こちらを参照してください。
タグ付き正規表現とは、検索でヒットした文字列の中からタグによって指定した部分を取り出す方法です。
その文字列を置換先の文字列の一部として利用することができます。
例えば、「AさんはBさんの友達です」というような文章を、「BさんはAさんの友達です」のように変換したい場合、従来はマクロでも使わないと自動で処理することはできませんでした。しかし、タグ付き正規表現による置換を使えば、一発で変換することができます。
先ほどの例の場合だと、
検索文字列: | .+\fさんは\f.+\fさんの友達です |
置換文字列: | \2さんは\0さんの友達です |
とすることで、「A」と「B」に相当する部分の入れ替えができます。
秀丸エディタにおけるタグ付き正規表現のルールは、
「検索元の中での取り出したい部分の両側を\fで区切る
置換先の文字列で、\0、\1、\2…といった形で検索元文字列を利用する
という形になります。
- 区切り記号の入れ方
検索元文字列の中から取り出したい部分がある時に、その部分の両側を「\f」で区切ってください。取り出したい部分が検索文字列の先頭である場合には、先頭には\fは要りません。同様に最後の場合も\fは要りません。
例えば「今日は晴れです」や「今日は雨です」などの文章の「晴れ」や「雨」の部分を取り出したい場合には、
今日は\f.+\fです
と指定すればいいです。ちなみにこの場合、
今日は晴れです。明日も晴れです。
という文章があると、「.+」の部分には「晴れです。明日も晴れ」がヒットしてしまいます。こういうことを避けるためには、
今日は\f(晴れ|雨)\fです
と表現するか、または
今日は\f.?.?\fです
と、\fの間の部分が2文字以下でしかヒットしないようにするなどの工夫が必要です。
- 検索元文字列の取り出し
先ほどの例の場合だと、「今日は」の部分が\0、次の区切り部分が\1、次の「です」の部分が\2で取り出すことができます。必要なのは\1なので置換文字列の方で、例えば
明日も\1です
とすれば、検索元文字列の中の「晴れ」や「雨」の部分を置換文字列の中で使うことができます。
- \fを入れるルール
\fの記号は、括弧の中に入れてはいけません。括弧の中に入れるとうまく区切り位置の計算ができなくなります。
また、\fでの区切りがあいまいになるような表現もいけないです。例えば
A\f.+\f.+
のように、どうにでも解釈できるような区切り位置は指定しないでください。
「*」や「?」のように、直前のパターンに対して意味を持つ表現を\fの直後に入れることも反則です。
秀丸エディタが区切り位置の計算に失敗した場合、\0、\1、\2…の部分には何も入らないです。
aaa\fbbb\f\1
のように、検索文字列中に\1などを書く場合は、\fは使えません。()を使った一般的正規表現互換のタグ付き正規表現の方法を使ってください。
(参考:一般的正規表現互換のタグ付き正規表現)