Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Powershell正则表达式仅返回第一个结果_Regex_Powershell - Fatal编程技术网

Regex Powershell正则表达式仅返回第一个结果

Regex Powershell正则表达式仅返回第一个结果,regex,powershell,Regex,Powershell,为什么我的正则表达式模式只返回第一个测试的名称/值?我想.+会让它成为一个非贪婪的模式 这是我的密码 $value = "Starting test: Connectivity Starting test: CheckSecurityError Starting test: DFSREvent" $value -match 'Starting test: (?<testName>.+)' $matches.testName 您应该使用

为什么我的正则表达式模式只返回第一个测试的名称/值?我想.+会让它成为一个非贪婪的模式

这是我的密码

$value = "Starting test: Connectivity
          Starting test: CheckSecurityError
          Starting test: DFSREvent"


$value -match 'Starting test: (?<testName>.+)' 

$matches.testName
您应该使用选择字符串:

您应该使用选择字符串:


一种方法是使用.Net类System.Text.RegularExpressions.Regex:

$value=开始测试:连接 正在启动测试:CheckSecurityError 启动测试:DFSREvent $regex=[System.Text.RegularExpressions.regex]::new'Starting test:?.+' $regex.Matches$value |%{$\.Groups['testName'].value} 或者通过调用静态方法而不是实例化regex对象: [System.Text.RegularExpressions.Regex]::匹配$value,'开始测试:?.+'|%{$|.Groups['testName'].value} 输出

连通性 检查安全性错误 DFSurvent MS文档: 或者您可以使用其他答案中提到的选择字符串/仅使用%{$\.Groups['testName'].value从匹配中提取相关捕获组的值

$value| 选择字符串-模式“开始测试:?。+”-AllMatches| %火柴| %{$\.Groups['testName'].value}
一种方法是使用.Net类System.Text.RegularExpressions.Regex:

$value=开始测试:连接 正在启动测试:CheckSecurityError 启动测试:DFSREvent $regex=[System.Text.RegularExpressions.regex]::new'Starting test:?.+' $regex.Matches$value |%{$\.Groups['testName'].value} 或者通过调用静态方法而不是实例化regex对象: [System.Text.RegularExpressions.Regex]::匹配$value,'开始测试:?.+'|%{$|.Groups['testName'].value} 输出

连通性 检查安全性错误 DFSurvent MS文档: 或者您可以使用其他答案中提到的选择字符串/仅使用%{$\.Groups['testName'].value从匹配中提取相关捕获组的值

$value| 选择字符串-模式“开始测试:?。+”-AllMatches| %火柴| %{$\.Groups['testName'].value}
如果它像其他正则表达式引擎一样,除非你告诉它,否则dot不会匹配换行符。同样,按照你的方式,捕获组将包括秒2开始测试:字符串以及所有空格。你希望它准确返回什么?如果它像其他正则表达式引擎一样,dot不会匹配换行符,除非你告诉它l将其转换为。按照您的方式,捕获组将包括秒2开始测试:字符串,以及所有空格。您希望它准确返回什么?作为多行正则表达式,我将如何执行此操作的可能重复?在select字符串调用上添加-AllMatches参数。在正则表达式定义i中不严格地使用多行.e.更改^和$的行为,但这意味着它能够返回多个匹配项,我认为这是您所追求的。e.行为就像应用了全局修饰符一样。作为多行正则表达式,我将如何执行此操作?在select字符串调用中添加-ALLMATCHS参数。在正则表达式定义中不严格地使用多行,即更改行为iour为^和$,但这意味着它可以返回多个匹配项,我认为这是您所追求的。即,其行为就像应用了全局修饰符一样
True
Connectivity
$value -split '\n' | sls 'Starting test: (?<testName>.+)' | % { Write-Host 'Result' $_ }
$value = @"
Starting test: Connectivity
Starting test: CheckSecurityError
Starting test: DFSREvent
"@

$Pattern = '^\s*Starting test: (?<testName>.+?)$'
($value -split '\n')|
    Where-Object {$_ -match $Pattern }|
      ForEach{$matches.testname}

"-----------------"
## alternative without named capture group

$value -split '\n' | 
  select-string -pattern  'Starting test: (.+)' -all | 
    ForEach {$_.matches.groups[1].value}
Connectivity
CheckSecurityError
DFSREvent
-----------------
Connectivity
CheckSecurityError
DFSREvent