1

当使用带有重复模式的 preg_replace 时,引用只返回最后一个。有什么方法可以全部获取吗?

例如:

 $str = "hello, world, hello1, world1"
 echo(preg_replace('/([^,]*,?)+/', '$1', $str));

会返回world1,但是有没有办法访问其他匹配的部分?

这只是一个例子,我只想知道是否有任何方法可以访问参考中的所有匹配部分?

4

1 回答 1

2

顺便说一句,我去测试了我的示例,发现您的示例实际上并不起作用。它必须[^,]+不是[^,]*,否则它会吃掉输入:

$str = "hello, world, hello1, world1"
echo preg_replace('/([^,]*,?)+/', '$1', $str);
# -> ""
echo preg_replace('/([^,]+,?)+/', '$1', $str);
# -> " world1"

您可以通过添加另一组括号来捕获所有事件:

$str = "hello, world, hello1, world1"
echo preg_replace('/(([^,]+,?)+)/', '$1', $str);
# -> "hello, world, hello1, world1"

或者您可以替换每个单独的事件,而不是整个重复模式:

$str = "hello, world, hello1, world1"
echo preg_replace('/([^,]+,?)/', '$1 AND', $str);
# -> "hello, AND world, AND hello1, AND world1 AND"

如果这些都不是您想要的,那么我怀疑preg_replace不是您想要的,并且preg_match_all可能更合适。

于 2012-08-06T04:02:47.407 回答