PowerShell: 正規表現で一致文字列を複数抽出する Matches
PowerShellで正規表現を使って複数の一致文字列を抽出したい場合、 RegExクラスのMatchesメソッドを使用します。 RegExは.NET Frameworkのクラスであり、 Matchesメソッドはスタティックメソッドです。
書式
[regex]::Matches(検索文字列, パターン文字列 [,検索オプション])
RegExクラスは正式には「System.Text.RegularExpressions.RegEx」と記述します。
ですがエイリアスとして「regex」が定義されているので[regex]と記述する方が
短くて済みます。
戻り値はMatchオブジェクトのコレクションです。
マッチしない場合は空文字が戻ります。
次のサンプルコードはMatchesメソッドの使用例です。
$s = "cat bat hat dat but" $m = [regex]::Matches($s, "b.t") $m
「$m」はMatchオブジェクトのコレクションなので、 次のようにいろいろな値が表示されます。 マッチした個数を知りたい場合はCountプロパティを指定します。
実行結果
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 4
Length : 3
Value : bat
ValueSpan :
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 16
Length : 3
Value : but
ValueSpan :
ほとんどの場合、取得したいのは太字で表示されている値(Value)のみだと思います。 Valueのみを取得する場合は「$m.Value」と記述します。
$s = "cat bat hat dat but" $m = [regex]::Matches($s, "b.t") $m.Value
これで値のみを取得できます。
実行結果
bat but
インデックスを使って単一の値を指定する場合は角括弧[]を使って記述します。
$m[0].Value # bat $m[1].Value # but
マッチしない場合は空文字
パターン文字列にマッチしない場合は空文字が戻ります。
$s = "cat bat hat dat but" $m = [regex]::Matches($s, "a.t") $m # $mは空文字なので何も表示されません。 [string]::IsNullOrEmpty($m) # True