[英]How does this Powershell Regex work?
'<Relation From="701047080" ObjectNumber="166543300" Output="77" To="464616324">' -match '(?<=Output=")[^"]*'
$matchs
然后包含77?
这就是我想要的,我只是不明白为什么它有效?
我找到的东西说我可以:
match '(?<NAME>Some regex)'
但我不知道'(?<='是什么?我真的很想理解语法......
我实际上需要提取Output和To两者的值...并且只需要在系统上使用powershell我需要这样做......
表达式(?<=Output=")
是一个lookbehind 。它只在字符串Output="
之后立即匹配。
表达式[^"]*
是一个否定的字符类 。它匹配所有字符,直到下一个双引号(如果没有双引号,则匹配字符串的结尾)。
[^"]*
表示除"
之外的任何数量的字符。
[^"]*
是主要表达方式。
(?<=Output=")
是一个lookbehind,并确保主表达式跟随lookbehind中的表达式,在这种情况下Output="
。 lookbehind表达式不包含在匹配中
我不认为正则表达式是最优的。
你可以使用:
'<Relation From="701047080" ObjectNumber="166543300" Output="77" To="464616324">' -match 'Output="(.*?)"'
(正则表达式与Output="(.*?)"
一样简单)
在$matches[1]
得到77分$matches[1]
正则表达式可能只是复杂的外观使得Output="
不是匹配的一部分。它使正则表达式更复杂并降低性能。所有你需要的是上面的正则表达式并用适当的组提取77。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.