【发布时间】:2016-05-16 16:31:57
【问题描述】:
我正在查看字符串 3-431 a4-2 4-13 并希望找到 3-431、a4-2 和 4-13。我使用以下模式:
/(.*-.* )*/gU
我得到了没有问题的预期结果:Online demo
问题是 - 当我想查看以其他一些子字符串开头和结尾的字符串(例如 [ 和 ])时,如何获得相同的结果。
如果我将主题修改为 [3-431 a4-2 4-13 ] 并将正则表达式修改为 /\[(.*-.* )*\]/gU 我只得到最后一次出现:4-13 并且我没有得到与第一个示例相同的结果。 Online demo
为什么会这样,我该如何解决?
【问题讨论】:
-
你为什么不用` ` 分割?
-
你不能用一个正则表达式来做到这一点。在 PCRE 中,量化的捕获组在每次量化的过程中都会被覆盖,只留下组中的最后一个值。我建议使用
\G构造,但这涉及到每场比赛的冗余(昂贵)前瞻。 -
简单的方法是捕获内容
\[([^\]]+)\],然后解析第1组的值。
标签: php regex preg-match-all pcre