如何编写可匹配PowerShell中here strings的正则表达式
匹配PowerShell Here String的正则方案
你可以直接使用以下正则表达式满足所有匹配要求:
/@(?<quote>['"])\r?\n(?<content>.*?)^\k<quote>@(?:\r?\n|\z)/gms
正则说明
各部分逻辑完全匹配你提出的三条规则:
- 起始标记校验:
@(?<quote>['"])\r?\n仅匹配后跟换行的@'或@"起始标记,兼容Windows和Unix换行格式,同时捕获引号类型到quote分组 - 结束标记校验:
^\k<quote>@(?:\r?\n|\z)仅匹配行首位置、和起始引号类型一致的'@/"@标记,且要求标记后只有换行或者字符串结束,没有多余字符 - 外层优先匹配:正则会跳过所有和起始引号类型不匹配的内部结束标记,直到找到对应类型的外层结束标记为止,自动满足嵌套场景下优先匹配外层的要求
不同环境适配
- 若你的正则引擎不支持命名分组,可使用编号引用版本:
/@(['"])\r?\n(.*?)^\1@(?:\r?\n|\z)/gms - 若在不支持
s(单行模式)标志的环境中使用(比如旧版JavaScript),可以将.替换为[\s\S]同时移除s标志:/@(['"])\r?\n([\s\S]*?)^\1@(?:\r?\n|$)/gm
匹配验证
该正则可正确匹配你给出的所有示例:
- 双引号包裹的外层here string不会被内部的
'@中断 - 单引号包裹的外层here string不会被内部的
"@中断 - 跨多行的复杂here string可完整匹配,不会提前截断
内容的提问来源于stack exchange,提问作者U. Bulle
相关产品推荐
相关产品推荐

