正規表現を覚えよう!サクラエディタでの文字列置換(番号指定参照)
はじめに
こんにちは、キャスレーコンサルティング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}
いざ置換!
上手くいきました!
最後に
私の知識もまだまだなんですが、
正規表現を使いこなせれば、仕事の効率化を図れるはずです!
ではでは。