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

时间:2015-12-06 08:31:15

标签: php regex

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

有一个字符串$string,如:

  

Lorem Ipsum`代码块`lorem`code`

我想从字符串中删除代码块并保留$ string(不带代码块),但也保留一个匹配数组,就像我用preg_mach_all得到的那样。

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

这可以在php的一个命令中使用吗?

1 个答案:

答案 0 :(得分:1)

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