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