描述
考虑以下应该在 javascript 中工作的正则表达式的 powershell 示例(或者它在http://www.pagecolumn.com/tool/regtest.htm上为我做了。正则表达式组返回 $1 将包含属性区域中的值子字符串第二个选项。我确实修改了您的源文本以说明这也会在属性子字符串中找到下划线。
^.*?_0_[^_]*[_](.*?)(_0_|$)
例子
$Matches = @()
$String = 'root_first_attributes_0_second_Attributes_ToVoteFor_0_third_attributes_0_third_name'
Write-Host start with
write-host $String
Write-Host
Write-Host found
([regex]'^.*?_0_[^_]*[_](.*?)(_0_|$)').matches($String) | foreach {
write-host "key at $($_.Groups[1].Index) = '$($_.Groups[1].Value)'"
} # next match
产量
从...开始:
root_first_attributes_0_second_Attributes_ToVoteFor_0_third_attributes_0_third_name
在 31 = 'Attributes_ToVoteFor' 处找到键
概括
^
从字符串的开头
.*?
移动最少数量的字符以达到
_0_
第一个分隔符
[^_]*
然后移动下一个非下划线字符
[_]
直到你读到第一个下划线
(.*?)
捕获并返回之前的所有字符
(_0_|$)
下一个分隔符或字符串结尾
额外学分
要捕获列表中第 X 组的属性字段,您可以修改正则表达式,将非贪婪搜索变为非捕获块,然后进行计数。这些可以在www.pcreck.com/JavaScript/advanced进行测试
^(?:.*?_0_){0}[^_]*[_](.*?)(?=_0_|$)
匹配first_attributes
^(?:.*?_0_){1}[^_]*[_](.*?)(?=_0_|$)
匹配Attributes_ToVoteFor
^(?:.*?_0_){2}[^_]*[_](.*?)(?=_0_|$)
匹配attributes
^(?:.*?_0_){3}[^_]*[_](.*?)(?=_0_|$)
匹配name