当使用带有重复模式的 preg_replace 时,引用只返回最后一个。有什么方法可以全部获取吗?
例如:
$str = "hello, world, hello1, world1"
echo(preg_replace('/([^,]*,?)+/', '$1', $str));
会返回world1,但是有没有办法访问其他匹配的部分?
这只是一个例子,我只想知道是否有任何方法可以访问参考中的所有匹配部分?
当使用带有重复模式的 preg_replace 时,引用只返回最后一个。有什么方法可以全部获取吗?
例如:
$str = "hello, world, hello1, world1"
echo(preg_replace('/([^,]*,?)+/', '$1', $str));
会返回world1,但是有没有办法访问其他匹配的部分?
这只是一个例子,我只想知道是否有任何方法可以访问参考中的所有匹配部分?
顺便说一句,我去测试了我的示例,发现您的示例实际上并不起作用。它必须[^,]+
不是[^,]*
,否则它会吃掉输入:
$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
可能更合适。