Powershell正则表达式如何工作?

时间:2011-10-13 22:30:42

标签: regex powershell

'<Relation From="701047080" ObjectNumber="166543300" Output="77" To="464616324">' -match '(?<=Output=")[^"]*'

$matchs然后包含77?

我想要的是什么,我只是不明白为什么会这样?

我找到的东西说我可以:

match '(?<NAME>Some regex)'

但我不知道'(&lt; ='是什么?而且我真的很想理解语法......

我实际上需要提取Output和To两者的值...并且只需要在系统上使用powershell我需要这样做...

2 个答案:

答案 0 :(得分:4)

表达式(?<=Output=")lookbehind。它仅在字符串Output="之后立即匹配。

表达式[^"]*negated character class。它匹配所有字符,直到下一个双引号(如果没有更多的双引号,则匹配到字符串的结尾)。

答案 1 :(得分:3)

[^"]*表示"以外的任意数量的字符。

[^"]*是主要表达方式。

(?<=Output=")是一个lookbehind,并确保主表达式跟随lookbehind中的表达式,在本例中为Output="。 lookbehind表达式不包含在匹配

我认为正则表达式不是最佳的。

您可以使用:

'<Relation From="701047080" ObjectNumber="166543300" Output="77" To="464616324">' -match 'Output="(.*?)"'

(正则表达式与Output="(.*?)"一样简单)

并获得了$matches[1]

中的77

正则表达式可能只是因为Output="不属于匹配而变得复杂。它使正则表达式更复杂并降低性能。您只需要上面的正则表达式,并使用适当的组提取77.