php - mb_eregi_replace 多个匹配项获取它们

标签 php pattern-matching

$string = 'test check one two test3';
$result = mb_eregi_replace ( 'test|test2|test3' , '<$1>' ,$string ,'i');
echo $result; 

这应该提供:<test> check one two <test3>

是否可以在不使用其他匹配函数的情况下找到 testtest3

最佳答案

您可以使用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/

相关文章:

php - 根据属性查找特定元素

php - 使用 PDO 更新查询不起作用

php - Woocommerce - 数量为 0 的商品已添加到购物车?

php - 监听 Symfony 2 中的所有事件

PHPExcel 字符串到时间

F# 和否定匹配

performance - Haskell 中的隐式模式匹配

与枚举和可选元组关联值的 Swift 模式匹配

scala - 带有 * (varargs) 参数的案例类的模式匹配

python lbp图像分类