当使用带重复模式的preg_replace时,引用只返回最后一个。有没有办法搞定所有人?
例如:
$str = "hello, world, hello1, world1"
echo(preg_replace('/([^,]*,?)+/', '$1', $str));
会返回 world1 ,但有没有办法访问其他匹配的部分?
这只是一个例子,我只是想知道是否有办法在参考中访问所有匹配的部分?
答案 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
可能更合适。