正規表現を覚えよう!サクラエディタでの文字列置換(番号指定参照)

 

はじめに

こんにちは、キャスレーコンサルティングIT部の岩井です。

今回は、以前にも書いた正規表現について書いてみます。
 前回のブログはコチラ→正規表現を覚えよう!サクラエディタでのgrep結果の編集

正規表現を使いたてのころ、上手く処理できなかった“文字列置換”。
最近、解決方法がわかりました!

その方法は「番号指定参照」と呼ぶようです。
その「番号指定参照」について書いてみます。

ご存知の方にとっては、一般的な方法なのでしょうが…

Javaのソースから、末尾が数字の getter,setter を洗い出し、
数字の前に”_”を追加するという作業がありました。

getA1() getA_1()
setA1(String a) setA_1(String a)
getA2() getA_2()
setA2(String a) setA_2(String a)
getXyz123() getXyz_123()
setXyz123(String xyz) setXyz_123(String xyz)

洗い出す だけなら…

対象となる文字列は

 ① ”get”または”set”で始まる
 ② ①の前に” “(半角スペース)または”.”
 ③ ①の後にアルファベットの大文字から始まる文字列が続く(1文字も可)
 ④ ③には” “(半角スペース)を含まない
 ⑤ ③の後に数字が続いて”(“で終わる

なので、検索条件は

[¥.| ][g|s]et[A-Z][^ 0-9]*[0-9]+¥(

 [¥.| ] … ” “(半角スペース)または”.”
 [g|s]et … ”get”または”set”
 [A-Z] … アルファベット大文字1文字
 [^ 0-9]* … 半角スペースと数字以外の文字列(文字数0も対象)
 [0-9]+ … 数字文字列(1文字以上が対象)
 [¥(] … ”(“
 ”(“.”と”(“は正規表現において意味を持つ文字(メタ文字)なので
 そのままの文字として扱うために”¥”を付与する)

となります。

結果、

黄色い部分がHITしました。

このまま置換しようとすると…

では、数字の前に”_”を入れてみましょう。

検索条件
[¥.| ][g|s]et[A-Z][^ 0-9]*[0-9]+¥(

置換後
[¥.| ][g|s]et[A-Z][^ 0-9]*_[0-9]+¥(

いざ置換!

当然と言えば当然の、残念な結果に…

置換後の
[¥.| ][g|s]et[A-Z][^ 0-9]*
[0-9]+¥(
は、それぞれそのままの文字列として扱われてしまいます。

これでは、置換対象が一発で見つかっても
置換は1つ1つ行うしかない
という、残念なことになってしまいます。

そこで「番号指定参照」

「番号指定参照」、ざっくり言えば

“(“から”)”で囲んだ条件式を
後続処理で変数的な表記として扱える

というものです。

詳しく説明するよりもまずは実践。

検索条件
([¥.| ][g|s]et[A-Z][^ 0-9]*)_([0-9]+¥()

置換後
$1_$2

いざ置換!

大成功!!!

検索条件の”(“から”)”までを、置換後に”$n”として記載します。
nは”(“から”)”の記載順に1からの連番です。

 ([¥.| ][g|s]et[A-Z][^ 0-9]*) … $1
 ([0-9]+¥() … $2

これが使えると”.equals()”の、右辺と左辺の入れ換えなんかもできちゃいますね。

もう1つ

 

先ほどは、「数字の前に”_”を追加する」という例で記載しましたが
「数字の前に”0″を追加する」という例にすると…

検索条件
([¥.| ][g|s]et[A-Z][^ 0-9]*)_([0-9]+¥()

置換後
$10$2

いざ置換!

残念!

“$1″と”0″を、”$10″と解釈してくれている模様です。

そんなときは”{}”を使って、”1″と”0″を分けちゃいましょう!

検索条件
([¥.| ][g|s]et[A-Z][^ 0-9]*)_([0-9]+¥()

置換後
${1}0${2}

いざ置換!

上手くいきました!

最後に

私の知識もまだまだなんですが、
正規表現を使いこなせれば、仕事の効率化を図れるはずです!

ではでは。