如何在preg_replace中获取匹配的子字符串?

时间:2017-08-06 01:16:27

标签: php preg-replace preg-replace-callback

我在preg_replace

的字符串中删除第一次出现的html标记
$html = preg_replace('#<p>(.*?)</p>#i', '', $html, 1);

如何将已删除的子字符串保存为新字符串:

$deleted = '<p>...</p>';

3 个答案:

答案 0 :(得分:1)

如何使用preg_replace_callback将匹配传递给用户定义的函数。

$str = preg_replace_callback($re, function ($m) use (&$p) { $p = $m[0]; }, $str, 1);
  • $m匹配数组的任何变量名称,其中索引0是完整模式匹配
  • use (&$p)用于存储匹配项的任何变量名称(通过引用传递)。

See this demo at eval.in

答案 1 :(得分:0)

获取您可以使用的子字符串preg_match()

preg_match('#<p>(.*?)</p>#i', $html, $matches);

只需检查它包含您需要的$ matches变量。

  

如果提供了匹配,那么它将填充搜索结果。   $ matches [0]将包含与完整模式匹配的文本,   $ matches 1将包含与第一个捕获的匹配的文本   带括号的子模式,依此类推。

之后使用preg_replace删除<p>代码。

但是,如果您只想删除<p>标记并保持子串只是preg_replace,请执行以下操作:

$html = "left <p>substring</p> right";
$html = preg_replace('#</?p>#i', '', $html);

echo $html;

输出:

left substring right

答案 2 :(得分:0)

尝试使用:

$result = preg_match('#<p>(.*?)</p>#i', $html);