我想在文本文件中匹配以下多行。
[1750256247]
; Rev:B,5
我试过跟随,但无法成功。你能帮我吗?
$fileContent | Select-String "(?smi)(^[1750256247](-|\s*$))(^;Rev: B,5$)" -AllMatches | Foreach {$.Matches} | Foreach {$.Value}
答案 0 :(得分:0)
并非完全100%确定您的目标,但将表达式更改为:(?smi)(^\[1750256247\](.|-|\s*$))(^;Rev: B,5$)
(示例here)有效。
表达方式的一些问题:
在正则表达式语法中,[
和]
字符表示字符集,即引擎将尝试匹配其中一个字符的一组字符。如果您需要匹配实际的[
和]
字符,则需要通过使用\
字符来转义它们。
您正在使用s
修饰符,因此允许句点字符也匹配换行符,但您没有使用句号字符。
编辑:根据@ stribizhev的建议,您可以使用(?smi)(^\[1750256247](.|-|\s*$))(^;Rev: B,5$)
。我个人会选择第一个选项,因为我认为它更具可读性,但意见很可能会有所不同。
答案 1 :(得分:0)
如果你在here-string中构建正则表达式,并且嵌入了换行符,我发现多行正则表达式更容易编写,更直观易读。
$regex = @'
(?ms)\[1750256247\]\s*
;Rev: B,5\s*
'@
只需将您尝试匹配的文字字符串粘贴到正则表达式中,然后根据需要转义并添加元字符,例如尾随空格。