以下代码仅返回一个匹配项。
$s = 'x.a,
x.b,
x.c
'
$s -match 'x\.(.*?)[,$]'
$Matches.Count # return 2
$Matches[1] # returns a only
除返回a, b, c
之外。
答案 0 :(得分:1)
-match
运算符仅找到第一个匹配项。与-AllMatches
一起使用的Select-String
将获取输入中的所有匹配项。另外,[,$]
匹配,
或$
文字字符,$
不是字符串/行末元字符。
可能的解决方案看起来像
Select-String 'x\.([^,]+)' -input $s -AllMatches | Foreach {$_.Matches} | Foreach-Object {$_.Groups[1].Value}
模式为x\.([^,]+)
,它与x.
匹配,然后将,
以外的任何一个或多个字符捕获到组1中。