テキストデータを編集する時、サクラエディタやSublime Textの正規表現置換を多用しています。
今回悩んだのは「各行の一番最初にヒットした1文字だけを置換する」パターンです。
※ 試行錯誤の結果ですので、もっとスマートな方法があれば教えてください。
具体例
次のようなデータがあるとします。
AAABAAABBAAAA
BCCCCBCCCCCCB
DBBDBDDDDDBBB
このデータ内の B
を置換したいと思います。
普通に検索すれば、すべての B
がヒットします。
AAA B AAA BB AAAA
B CCCC B CCCCCC B
D BB D B DDDDD BBB
しかし、今回は「各行の一番最初にヒットした B
だけ」を置換したいので、次のようにヒットさせたいです。
AAA B AAABBAAAA
B CCCCBCCCCCCB
D B BDBDDDDDBBB
検索条件
次の正規表現で検索します。
(^.*?)(B)
この正規表現は、2つのグループから構成されています:
-
(^.*?)
: 行頭から次に指定する文字(B
)までの間の最短の文字 -
(B)
: 指定する文字
1つ目のグループは $1
(または \1
)で、2つ目のグループは $2
(または \2
)で参照することができます。
置換
B
を #
に置換したい場合、次の置換文字列を指定します。
$1#
この置換文字列は、1つ目のグループの後ろの文字を #
に置換せよ、という意味になります。
先ほどの検索条件で指定したとおり、1つ目のグループの後ろの文字は B
になるので、結果的に B
が #
に置換されます。
結果
AAA # AAABBAAAA
# CCCCBCCCCCCB
D # BDBDDDDDBBB