替换字符串时替换组

时间:2018-05-01 00:10:15

标签: php regex

$val = '<span>Hello World</span>';
echo preg_replace('/<(.+?)>(.+?)<\/(.+?)>/', "$1 $2 $3", $val);

返回:

  

span Hello World span

是否有可能更换第二组?第二组是Hello World但它可以是任何东西,因为它是一个动态值。我想要的是用_替换所有空格。

我想在没有任何其他PHP功能的情况下这样做。所以它应该只是RegEx。

1 个答案:

答案 0 :(得分:1)

这将是preg_replace_callback的良好候选人。

$value = '<span>Hello World</span>';

echo preg_replace_callback('/<(.+?)>(.+?)<\/(.+?)>/', function (array $matches) {
    $matches[2] = str_replace(' ', '_', $matches[2]);
    return "{$matches[1]} {$matches[2]} {$matches[3]}";
}, $value);