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

如何编写可匹配PowerShell中here strings的正则表达式

匹配PowerShell Here String的正则方案

你可以直接使用以下正则表达式满足所有匹配要求:

/@(?<quote>['"])\r?\n(?<content>.*?)^\k<quote>@(?:\r?\n|\z)/gms

正则说明

各部分逻辑完全匹配你提出的三条规则:

  1. 起始标记校验:@(?<quote>['"])\r?\n 仅匹配后跟换行的@'或@"起始标记,兼容Windows和Unix换行格式,同时捕获引号类型到quote分组
  2. 结束标记校验:^\k<quote>@(?:\r?\n|\z) 仅匹配行首位置、和起始引号类型一致的'@/"@标记,且要求标记后只有换行或者字符串结束,没有多余字符
  3. 外层优先匹配:正则会跳过所有和起始引号类型不匹配的内部结束标记,直到找到对应类型的外层结束标记为止,自动满足嵌套场景下优先匹配外层的要求

不同环境适配

  • 若你的正则引擎不支持命名分组,可使用编号引用版本:
    /@(['"])\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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:45:03