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

如何用正则表达式捕获带换行间隔的重复MY_PROJ模式?

解决正则匹配项目块的问题

我懂你现在的困扰——本来想把每个以MY_PROJ开头的区块分别捕获,结果用了多行模式的^(MY_PROJ.+)([\s\S]+)之后,第一个项目直接把后面所有内容都吞进去了,完全达不到预期的分组效果。

其实问题出在贪婪匹配上,[\s\S]+会尽可能多地匹配字符,直到字符串结束。要实现每个项目块单独捕获,我们需要让正则在遇到下一个MY_PROJ开头的行时停止匹配,这里可以用非贪婪匹配+正向预查来解决:

可行的正则表达式

^(MY_PROJ\d+)\n([\s\S]+?)(?=\nMY_PROJ|$)

正则各部分解释

  • ^:在多行模式下,匹配每行的开头
  • (MY_PROJ\d+):捕获项目名称(比如MY_PROJ10、MY_PROJ11),\d+确保匹配后面的数字后缀
  • \n:匹配项目名后的换行符,分隔项目名和内容行
  • ([\s\S]+?):非贪婪匹配所有字符(包括换行),+?表示尽可能少地匹配,直到触发后面的断言
  • (?=\nMY_PROJ|$):正向预查,告诉正则“匹配到下一个MY_PROJ开头的行,或者字符串结束时就停止”

匹配效果演示

用这个正则匹配你的输入内容,会得到两个精准的匹配结果:

  • result [0]
    • Group 0: MY_PROJ10
    • Group 1:
      1st line
      2nd line
      
  • result [1]
    • Group 0: MY_PROJ11
    • Group 1:
      3rd line
      4th line
      

记得要开启多行模式(比如正则工具里的m标志,或者代码里对应的多行参数),这样^才能正确匹配每行的开头。

内容的提问来源于stack exchange,提问作者hungry4code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:50:42