You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell启用MultiLine选项时,多行替换匹配行尾失效问题

PowerShell -replace 多行替换失效的原因

核心问题:CRLF换行符与正则行尾匹配的冲突

PowerShell里用双引号@"..."@定义的多行字符串,默认换行符是CRLF(\r\n)。开启(?m)(MultiLine)模式后,正则中的$仅匹配**\n换行符的前一个位置**,不会把前面的\r(回车符)视为行尾的一部分。

你的正则(?m)^---$要求整行只能是---,但实际字符串里---后面跟着\r\n,相当于---末尾还有个隐藏的\r字符,导致$无法匹配到---的结尾,所以替换完全没生效。

两种快速修复方法

  • 调整正则,允许行尾存在可选的\r:
@"
abc
---
def
"@ -replace '(?m)^---\r?$', 'AAA'
  • 改用单引号的Here-String(@'...'@),它会保留编辑器的原始换行符,若编辑器使用LF(\n)换行,就能直接匹配:
@'
abc
---
def
'@ -replace '(?m)^---$', 'AAA'

验证方式

可以用以下代码查看字符串的字节细节,能清晰看到---后面的\r(ASCII码13)和\n(ASCII码10):

$str = @"
abc
---
def
"@
[System.Text.Encoding]::ASCII.GetBytes($str)

内容的提问来源于stack exchange,提问作者Łukasz Nojek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:05:25