$string = 'test check one two test3';
$result = mb_eregi_replace ( 'test|test2|test3' , '<$1>' ,$string ,'i');
echo $result;
这应该提供:<test> check one two <test3>
是否可以在不使用其他匹配函数的情况下找到 test 和 test3 ?
最佳答案
您可以使用preg_replace_callback
相反:
$string = 'test check one two test3';
$matches = array();
$result = preg_replace_callback('/test|test2|test3/i' , function($match) use ($matches) {
$matches[] = $match;
return '<'.$match[0].'>';
}, $string);
echo $result;
这里 preg_replace_callback
将为模式的每个匹配调用传递的回调函数(请注意 its syntax differs from POSIX )。在这种情况下,回调函数是 anonymous function它将匹配添加到 $matches
数组并返回要替换匹配的替换字符串。
另一种方法是使用 preg_split
在匹配的分隔符处分割字符串,同时捕获分隔符:
$parts = preg_split('/test|test2|test3/i', $string, null, PREG_SPLIT_DELIM_CAPTURE);
结果是一个由交替的不匹配部分和匹配部分组成的数组。
关于php - mb_eregi_replace 多个匹配项获取它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415891/