如何从单行捕获多个正则表达式匹配到Powershell中的$ matches magic变量?

Etz*_*tet 18 regex powershell powershell-2.0

假设我有字符串"blah blah F12 blah blah F32 blah blah blah blah",我想要匹配F12F32,我将如何捕获两个Powershell魔法变量$ matches?

如果我在Powershell中运行以下代码:

$string = "blah blah F12 blah blah F32 blah blah blah"
$string -match "F\d\d"
Run Code Online (Sandbox Code Playgroud)

$ matches变量仅包含F12

我也尝试过:

$string -match "(F\d\d)"
Run Code Online (Sandbox Code Playgroud)

这次$ match有两个项目,但都是F12

我希望$ match包含F12F32以进行进一步处理.我似乎无法找到办法.

非常感谢所有的帮助.:)

Kei*_*ill 42

您可以使用PowerShell 2.0中的Select-String执行此操作,如下所示:

Select-String F\d\d -input $string -AllMatches | Foreach {$_.matches}
Run Code Online (Sandbox Code Playgroud)

前段时间我曾要求-matchall MS Connect上有一个操作员,这个建议已被关闭,并附有此评论:

"这是通过select-string的-allmatches参数修复的."

  • @NathanHartley` $ string | Select-String"(F\d\d)" - AllMatches | %匹配| %Value` (6认同)

son*_*njz 16

我建议使用这种语法,以便更容易处理您的匹配数组:

$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
Run Code Online (Sandbox Code Playgroud)

  • 我不会使用保留的变量名称 **$matches**,而是使用自己的变量,如 **$m**。如果存在捕获组,则要显示组 1 等的所有值,请使用:`$m | % {$_.groups[1].value}` (2认同)