2017-08-06 33 views
-1

我删除HTML标记的第一次出现在字符串preg_replace如何获取preg_replace中的匹配子字符串?

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

我怎样才能删除的子保存为一个新的字符串:

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

的DOMDocument :: removeChild之 –

+0

@All卡西米尔的评论是最好的做法。使用html解析器处理html字符串是最值得信赖的。为了获得最佳效果,您应该花时间研究和开发利用他的建议的方法。 – mickmackusa

回答

0

,让你可以使用子preg_match()

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

只是检查$ matches变量它包含你所需要的。

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

之后使用preg_replace删除<p>标记。

,但如果你只是想删除<p>标签,并保持子刚preg_replace这样的:

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

echo $html; 

输出:

left substring right 
+0

我发布了这个确切的答案,但得到了几个downvotes。有时候这个网站可能会引起人们的注意! – madscientist159

+0

是的,有时候人们很奇怪:/ – yoeunes

0

尝试使用:

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

你回答什么问题? 'preg_match'返回一个布尔值,你在做什么? – Toto

1

如何关于使用将匹配传递给用户的preg_replace_callback d已定义的功能。

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

See this demo at eval.in

相关问题