web-dev-qa-db-ja.com

複数の正規表現の一致を1行からPowershellの$ matchesマジック変数に取り込む方法は?

文字列"blah blah F12 blah blah F32 blah blah blah"があり、F12と一致させたいとします。 F32、Powershellマジック変数$ matchesに両方をキャプチャするにはどうすればよいですか?

Powershellで次のコードを実行すると、

$string = "blah blah F12 blah blah F32 blah blah blah"
$string -match "F\d\d"

$ matches変数にはF12のみが含まれます

私も試しました:

$string -match "(F\d\d)"

今回は$ matchesに2つのアイテムがありましたが、両方ともF12です。

$ matchesにF12F32の両方を含めてさらに処理したい。私はそれを行う方法を見つけることができないようです。

すべての助けをいただければ幸いです。 :)

20
Etzeitet

PowerShell 2.0でSelect-Stringを使用して、次のようにこれを行うことができます。

Select-String F\d\d -input $string -AllMatches | Foreach {$_.matches}

しばらく前に -matchall operator MS Connectで、この提案は次のコメントで修正され、クローズされました:

「これは、select-stringの-allmatchesパラメーターで修正されています。」

40
Keith Hill

この構文を使用すると、一致の配列を簡単に処理できるようになります。

$string = "blah blah F12 blah blah F32 blah blah blah" ;
$matches = ([regex]'F\d\d').Matches($string);
$matches[1].Value; # get matching value for second occurance, F32
17
sonjz
$String = @'
MemberProgram PackageID="12345678" ProgramName="Install"/
MemberProgram PackageID="87654321" ProgramName="Install"/
MemberProgram PackageID="21436587" ProgramName="Install"/
MemberProgram PackageID="78563412" ProgramName="Install"/
'@
([regex]'(?<=PackageID=\")\d+(?=\")').Matches($String).value
0
BiaoGuo