PHP从字符串中删除正则表达式,但保持匹配&;休息


PHP remove regex from string, but keep match & rest

php中有没有一种方法可以组合preg_match_all和preg_replace?

具有类似于:的字符串$string

Lorem Ipsum`代码块`Lorem`代码`

我想从字符串中删除代码块,并保留$string(没有代码块),但也要保留一个匹配数组,就像我使用preg_mach_all一样。

[
  0 => `code block`,
  1 => `code`
]

这在php中的一个命令中可能吗?

您可以使用preg_replace_callback:

$s = 'Lorem Ipsum `code block` lorem `code`';
$matches = array(); // array to keep removed matches
$repl = preg_replace_callback('/(`[^`]*`)'h*/', function($m) use(&$matches) {
            $matches[]=$m[1]; return ''; }, $s);
echo $repl . "'n";
print_r($matches);

输出:

Lorem Ipsum lorem
Array
(
    [0] => `code block`
    [1] => `code`
)