hakeの日記

Windows環境でプログラミングの勉強をしています。

PowerShell - 正規表現

match演算子

変数$Matchesでマッチした文字列を取得できる。要素0がマッチした文字列、要素1以降が部分マッチ(キャプチャ)された文字列になる。
ただし最初にマッチしたものしか得られないみたい。

PS C:\> "abcde" -match "(.)(.)"
True
PS C:\> $Matches

Name            Value
----            -----
2               b
1               a
0               ab

PS C:\> $Matches[0]
ab

 
配列からマッチした要素を抜き出すこともできる様です。

PS C:\> @("one", "two", "three", "four", "five") -match "t"
two
three

 

regexオブジェクト

正規表現オブジェクトを使用するとマッチした全てが取得できる。

PS C:\> $re = New-Object regex("(.)(.)")     # $re = [regex]"(.)(.)"でも可
PS C:\> $m = $re.Matches("abcde")
PS C:\> $m

Groups   : {ab, a, b}
Success  : True
Captures : {ab}
Index    : 0
Length   : 2
Value    : ab

Groups   : {cd, c, d}
Success  : True
Captures : {cd}
Index    : 2
Length   : 2
Value    : cd

PS C:\> $m[1].Groups[1]

Success  : True
Captures : {c}
Index    : 2
Length   : 1
Value    : c

PS C:\> $m[1].Groups[1].Value
c
後方参照
PS C:\> $re = new-object regex( "(\d)(\d)(\d)(\d)" )
PS C:\> $re.replace("1234", "`$4`$3`$2`$1")
4321