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

如何结合匹配条件用非贪婪后向查找选取特定字符间文本?

解决带模糊匹配条件的尖括号间文本提取问题

现有不少提取<>之间文本的正则方案,但大多未考虑给目标文本添加匹配条件。一旦加入诸如.*rary.*ring.*这类模糊匹配规则,原有的非贪婪匹配逻辑就会失效——比如把基础正则(?<=>)[^<>]+(?=<)修改为带模糊条件的版本后,会出现过度匹配或匹配不符合要求的情况。

解决方案正则表达式

要提取**<>之间、不含<>字符、且符合.*rary.*ring.*模糊匹配(支持跨多行)**的文本,可使用以下正则:

(?<=>)(?:(?!<|>)[\s\S])*?rary(?:(?!<|>)[\s\S])*?ring(?:(?!<|>)[\s\S])*?(?=<)

正则逻辑拆解

  • (?<=>):正向后向断言,定位到>之后的起始位置
  • (?:(?!<|>)[\s\S])*?:非捕获组,匹配任意不包含<或>的字符([\s\S]覆盖所有字符含换行,(?!<|>)确保不会匹配到尖括号),*?非贪婪模式避免跨多个<>匹配
  • rary/ring:匹配你指定的模糊匹配关键词
  • (?=<):正向前瞻断言,定位到<之前的结束位置

简化写法(依赖正则引擎特性)

如果你的正则引擎支持DOTALL模式(让.匹配换行符),也可以用更简洁的版本:

(?<=>)(?:(?!<|>).)*?rary(?:(?!<|>).)*?ring(?:(?!<|>).)*?(?=<)

为什么原有写法失效?

之前的错误写法用了.+,它是贪婪匹配且未排除<>字符,会从第一个>后一直匹配到最后一个<前,中间可能包含其他<>,完全打破了“仅在一对<>之间匹配”的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:46:19