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

PCRE2(PHP>=7.3)正向预查正则提取目标内容的问题

PCRE2(PHP>=7.3)正向预查正则提取目标内容的问题

嘿,我来帮你搞定这个正则提取的问题!先理清楚你的核心需求:要从开头固定是newProductsInfo: 加数组的字符串里,把数组里的条目拆出来,而且得区分开作为分隔符的逗号(后面跟空格)和条目内部的逗号(后面没空格),像[4]Same, [5]Value这种就得完整提取出来对吧?

你之前用的(?<=newProductsInfo: \[)[^,\]]+为啥只拿到[1呢?因为[^,\]]+是匹配“不是逗号也不是右括号的字符”,一碰到第一个逗号就停了,根本没法区分哪种逗号是分隔符,这思路得调整~

给你个能直接用的PCRE2正则:

(?<=newProductsInfo: \[)(?:[^,\]]+|,(?! ))+(?=, |\])

我给你拆解下每个部分的作用,方便你理解:

  • (?<=newProductsInfo: \[):正向预查,确保我们的匹配是从newProductsInfo: [之后开始的,不会匹配到前面的无关内容
  • (?:[^,\]]+|,(?! ))+:这是个非捕获组,用来重复匹配两种情况:
    • [^,\]]+:匹配任意不是逗号、不是右括号的字符,也就是条目里的正常内容
    • ,(?! )):匹配后面不跟空格的逗号——也就是条目内部的逗号,不能当成分隔符的那种
  • (?=, |\]):正向预查,确保我们的匹配结束在“逗号+空格”(下一个条目的分隔符)或者右括号(数组的结尾)

你去Regex101里选PCRE2(PHP>=7.3)引擎测试的话,就能得到你想要的四个结果:

  • [1] - $2 dollars
  • [2] New Product
  • [3] Hello
  • [4]Same, [5]Value

要是你之后遇到类似的“区分特定分隔符”的正则问题,这个“用负向预查排除非分隔符”的思路也能复用哦!

备注:内容来源于stack exchange,提问作者Prosy A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:15:30