我不明白为什么Select-String不匹配

时间:2013-07-10 15:47:08

标签: regex powershell-v2.0

$lines = '<string>D:\home\bob\utility.mdb</string>'

[String[]]$varr = $lines | Select-String -AllMatches -Pattern "<string>*.mdb" |
Select-Object -ExpandProperty Matches |
Select-Object -ExpandProperty Value

这将返回null。

最终,我想要从<string></string>的整行。

但显然我不知道如何在powershell中表达这一点。

1 个答案:

答案 0 :(得分:1)

在您的初始示例中:

<string>[\s]*.mdb[\s]*

第一个[\ s] *与任何东西都不匹配。您可能打算:

<string>[\S]*.mdb[\s]*

但是,我认为属性Matches将从头到尾接收整个字符串,这意味着您必须放置所有内容,并且需要转义点,因为您可以将其称为通配符:

<string>[\S]*\.mdb[\s]*<\/string>

而且我认为你可以删除一些不需要的部分(我对powershell的正则表达式并不太熟悉,但我还没有看到你必须在{(1}}中放置方括号内的字符类):< / p>

\S

小解释:

  • <string>\S*\.mdb<\/string> 与空格字符匹配,通常也会匹配换行符或标签(分别为\s\n)。

  • \t将匹配\S不匹配的所有内容。