PHP:如何获取所有正则表达式匹配项?

4
在PHP中是否可能得到所有正则表达式匹配?我需要一个脚本,例如,在abc中匹配.+并给出以下结果:
Array(abcabbcabc

我认为这就是你想要的内容:https://dev59.com/xHE85IYBdhLWcg3wx2j2 - shamittomar
1
这不是正则表达式的本意,也没有可靠的方法来做到这一点,除了编写自己的(子集)正则表达式解析器并执行与所有其他正则表达式实现不同的操作。 - Wrikken
@shamittomar 不,我认为“.+”只是一个例子已经足够清楚了。 - Tom
@Wrikken 也许你应该把那个评论发表为答案。 - Tom
3个回答

1
问题出在重叠部分,您想匹配'ab'和'bc',但是简单的正则表达式无法实现。不过请考虑以下方法。
您可以使用以下任一行将每个字符拆分出来:
preg_match_all('/./', 'abc', $matches);
str_split('abc');

提供给您:array('a', 'b', 'c')。
以下内容将把成对的字符与剩余的单个字符分开:
preg_match_all('/.{2}|./', 'abc', $matches);

给你:array('ab', 'c');
因此,您可以尝试使用这些的组合/变化来实现您的目标。

1

我不确定正则表达式中是否有一个定义好的“所有匹配项”的集合。

例如,如果您的模式是.+.+,第一个.+匹配什么?第二个匹配什么?

一个字符串可能以多种不同的方式与特定的RE绑定匹配,并且由RE的不同部分捕获的子字符串可能取决于贪婪匹配与非贪婪匹配等因素。但是,没有定义的方法来迭代所有不同的可能捕获。要做到这一点,您必须大幅改变RE的处理方式。


abc 上执行 .+.+ 将会得到数组(ab, bc, abc)。 - Tom
我理解你的回答,但我仍然希望有一个解决方案,比如一个可以回答我的请求的自定义库 :) - Tom

0

我知道这个问题有点旧了,但仍然可能有人需要答案。

查看 preg_match_all 函数的 flags 参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接