具有重复模式的preg_replace

时间:2012-08-05 11:41:14

标签: php regex preg-replace

当使用带重复模式的preg_replace时,引用只返回最后一个。有没有办法搞定所有人?

例如:

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

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

这只是一个例子,我只是想知道是否有办法在参考中访问所有匹配的部分?

1 个答案:

答案 0 :(得分: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可能更合适。