PowerShell正则表达式多行

时间:2016-01-15 07:54:42

标签: regex windows powershell multiline

我想在文本文件中匹配以下多行。

[1750256247]
; Rev:B,5

我试过跟随,但无法成功。你能帮我吗?

$fileContent | Select-String "(?smi)(^[1750256247](-|\s*$))(^;Rev: B,5$)" -AllMatches | Foreach {$.Matches} | Foreach {$.Value}

2 个答案:

答案 0 :(得分:0)

并非完全100%确定您的目标,但将表达式更改为:(?smi)(^\[1750256247\](.|-|\s*$))(^;Rev: B,5$)(示例here)有效。

表达方式的一些问题:

  1. 在正则表达式语法中,[]字符表示字符集,即引擎将尝试匹配其中一个字符的一组字符。如果您需要匹配实际的[]字符,则需要通过使用\字符来转义它们。

  2. 您正在使用s修饰符,因此允许句点字符也匹配换行符,但您没有使用句号字符。

  3. 编辑:根据@ stribizhev的建议,您可以使用(?smi)(^\[1750256247](.|-|\s*$))(^;Rev: B,5$)。我个人会选择第一个选项,因为我认为它更具可读性,但意见很可能会有所不同。

答案 1 :(得分:0)

如果你在here-string中构建正则表达式,并且嵌入了换行符,我发现多行正则表达式更容易编写,更直观易读。

$regex = @'
(?ms)\[1750256247\]\s*
;Rev: B,5\s*
'@

只需将您尝试匹配的文字字符串粘贴到正则表达式中,然后根据需要转义并添加元字符,例如尾随空格。