読者です 読者をやめる 読者になる 読者になる

Powershellの正規表現で桁数固定の文字列にマッチさせたいとき

とても基本的なことなのだが、ちょっとはまってしまったのでメモ。

Powershell正規表現で桁数固定の文字列にマッチさせたいとき、ちゃんと数値の前後の文字列もパターンに含めないと意図しない文字列にもマッチしてしまう

例えば、「test.NNN」(Nは0-9の数字)というパターンにマッチさせたいとき、

PS D:\> #これでいいかなーと思いきや
PS D:\> "test.005" -match "test.\d{3}"
True
PS D:\> #これもマッチしてしまう
PS D:\> "test.0005" -match "test.\d{3}"
True
PS D:\> "test.005.txt" -match "test.\d{3}"
True

防止するためには桁数指定をするときには必ず前後の文字列もパターンに加えるようにする

PS D:\> #不要なものをマッチさせないためには終端を示すメタキャラクタ($)を追加する
PS D:\> "test.0005" -match "test.\d{3}$"
False
PS D:\> "test.005.txt" -match "test.\d{3}$"
False
PS D:\> "test.005" -match "test.\d{3}$"
True

しょうもないんだけど小一時間ぐらい悩んでしまった。 ちゃんと睡眠をとった上で作業しよう。