我有一系列的正则表达式:
suresnes|suresne|surenes|surene
pommier|pommiers
^musique$
^(faq|aide)$
^(file )?loss( )?less$
paris
faq <<< this match twice
我的使用情况是,每个匹配到的模式都要显示一个链接给我的用户, 这样我就可以有多个模式匹配。
我会针对一个简单的文本字符串进行这些模式的测试,例如“住在巴黎”/“FAQ”/“POM”等等。
最简单的方法是使用preg_match循环遍历所有的模式,但是由于我的页面性能很重要,所以这种方法看起来不太好。
下面是我尝试过的方法:将所有这些表达式与组名组合在一起。
preg_match("@(?P<group1>^(faq|aide|todo|paris)$)|(?P<group2>(paris)$)@im", "paris", $groups);
从上面可以看到,每个模式都被分组:(?P<GROUPNAME>PATTERN)
,并且它们都通过竖杠|
进行分隔。
结果并不是我期望的,因为只返回了第一个匹配的组。似乎当匹配发生时,解析就停止了。
我想要的是所有匹配组的列表。preg_match_all
也没有用。
谢谢!
$groups[0]
应该包含一个等同于匹配列表的数组。$groups['group1']
将包含与第一组匹配项相同长度的列表。对于 group2 也是如此。已测试,它可以正常工作。另外,如果您担心性能问题,请检查 原子组。 - Loamhoofpreg_match_all
来完成这个任务的简单方法,因为它只会返回第一个匹配组的匹配结果。 - soju