1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

正規表現のキャプチャについて

Last updated at Posted at 2020-04-17

正規表現を使用していく中でキャプチャという単語を知ったものの、検索してもサクッとキャプチャのことだけ書いてあるページが見当たらなかったのでメモ。

##▼ キャプチャとは
そもそも、キャプチャってなんぞや?というレベルだったのでまずはそこから。

簡単に言うと、()で囲った文字列を記憶してくれるとても便利な機能。
記憶した文字列は$1,$2,$3...でキャプチャした順に取り出すことができるそう。

()で囲ったら囲った順に$1,$2,$3と変数に格納されるイメージですね。

例1
#検索対象
I am good hogehoge man

#goodをキャプチャ
(good)

#参照
$1
#$1 => good

要はこんな感じになるらしい。ほんとかい。
(上記は完全にイメージです。こんな使い方はできません。たぶん)

##▼ PowerShellで動きを確認してみる
今回はPowerShellを使ってキャプチャの動きを確認してみます。
正規表現は言語によって動作が異なるようなので、まあ確認程度に思っていただければ。

capture.ps1
"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つ付けてあげる必要があるそう。

試しに先程の例から`(バッククォート)を取り除いた状態で実行してみましょう。

バッククォート取り除いたver
"I am hogehoge man" -replace "(hogehoge)","good $1"

#出力結果
#I am good  man

ただの良い人になってしまいました。完全に$1(中身はhogehoge)が認識されていません。

正規表現、奥が深い。ついでにPowerShellも奥が深い。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?