PowerShell使用-match正则匹配时如何实现跨换行符匹配所有字符
PowerShell 使用 -match 匹配含换行的全部内容的方法
要让-match操作符的正则匹配到包含换行符在内的所有字符,只需要在正则表达式开头添加单行模式修饰符(?s),该模式下正则的.会匹配包括换行符在内的任意字符。
示例代码
$multilineString = "foo bar baz" # 开启单行模式匹配全部内容 $multilineString -match "(?s).*" | Out-Null $matches[0]
运行后输出会包含原始字符串的全部三行内容(保留原有缩进)。
如果你需要得到无缩进的输出,可调整正则匹配逻辑,自动去除每行的前导空格:
$multilineString -match "(?s).*" | Out-Null # 逐行处理去除前导空格后输出 $matches[0] -split "`n" | ForEach-Object { $_.TrimStart() }
运行后输出即为:
foo bar baz
原错误写法说明
之前(.|\r)*、(.|\r\n)*写法不生效,是因为PowerShell中字符串的换行默认仅为\n,不会携带\r字符,所以无法匹配到换行位置。
内容的提问来源于stack exchange,提问作者Shaun Luttin
相关产品推荐
相关产品推荐

