正規表現を使用していく中でキャプチャという単語を知ったものの、検索してもサクッとキャプチャのことだけ書いてあるページが見当たらなかったのでメモ。
##▼ キャプチャとは
そもそも、キャプチャってなんぞや?というレベルだったのでまずはそこから。
簡単に言うと、()
で囲った文字列を記憶してくれるとても便利な機能。
記憶した文字列は$1,$2,$3...
でキャプチャした順に取り出すことができるそう。
()
で囲ったら囲った順に$1,$2,$3
と変数に格納されるイメージですね。
#検索対象
I am good hogehoge man
#goodをキャプチャ
(good)
#参照
$1
#$1 => good
要はこんな感じになるらしい。ほんとかい。
(上記は完全にイメージです。こんな使い方はできません。たぶん)
##▼ PowerShellで動きを確認してみる
今回はPowerShellを使ってキャプチャの動きを確認してみます。
正規表現は言語によって動作が異なるようなので、まあ確認程度に思っていただければ。
"I am hogehoge man" -replace "(hogehoge)","good `$1"
#出力結果
#I am good hogehoge man
上記では-replace
を使って、文字列を置換しています。
(hogehoge)
で置換対象を示すと共に、キャプチャを実行。
理論上、この段階で$1
という変数にhogehoge
が格納されています。
そして置換する文字にgood `$1
を使用します。
つまり置換する文字はgood hogehoge
になるわけですね。
結果は上記で示したとおり、I am good hogehoge man
となります。なるほど。
##(余談) なんで$1の前に`(バッククォート)があるわけ?
どうやら、PowerShellで$1
を使うには`(バッククォート)を1つ付けてあげる必要があるそう。
試しに先程の例から`(バッククォート)を取り除いた状態で実行してみましょう。
"I am hogehoge man" -replace "(hogehoge)","good $1"
#出力結果
#I am good man
ただの良い人になってしまいました。完全に$1(中身はhogehoge)
が認識されていません。
正規表現、奥が深い。ついでにPowerShellも奥が深い。