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

如何用preg_match_all实现排除特定内容的正则匹配?该技术术语是什么?

正则解决方案:排除特定模式的匹配

核心技术术语

这里用到的正则技术叫做正向否定预查(Negative Lookahead Assertion),属于正则断言的一种,作用是确保某个位置之后不会出现指定的字符串,且不会消耗匹配内容中的字符。

具体实现代码

修改原正则表达式,加入正向否定预查来过滤掉包含"hide":true的注释块:

preg_match_all('/"user":"(.*?)"(?:(?!"hide":true).)*?-->/s', $input_lines, $output_array);

正则逻辑拆解

  • "user":"(.*?)":精准匹配"user":"开头的片段,用非贪婪捕获组(.*?)提取用户名内容。
  • (?:(?!"hide":true).)*?:这是实现过滤的核心部分:
    • (?:...):非捕获分组,仅用于逻辑分组,不会额外存储匹配结果。
    • (?!"hide":true):正向否定预查,断言当前位置之后不存在"hide":true这个字符串。
    • .:匹配任意单个字符,搭配s修饰符时可以匹配换行符(适配多行注释)。
    • *?:非贪婪匹配,保证匹配到第一个-->就停止,避免跨注释块的过度匹配。
  • -->:匹配HTML注释的结束标记。

结果验证

运行这段代码后,$output_array[1]会得到目标用户名列表:josh-hart、julius-randle、obi-toppin、mitch-robinson,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:37:05