删除标题标签内的所有段落标签


PHP Remove all paragraph tags inside header tags

我已经考虑了一段时间了。

我有这个字符串(在h2标签之前和之后有更多的内容):

...<h2 style='line-height: 44px;'><p>Lorem Ipsum</p></h2>...

我用什么正则表达式来删除所有的

标签在这些头标签?

我正试着做这样的事情,但积极的一面并没有起作用:

// for the starting <p> tag
$str = preg_replace('/(?<=<h[1-6]{1}[^>]+>)'s*<p>/i', '', $str);
// for the ending </p> tag
$str = preg_replace('/<'/p>'s*(?=<'/h[1-6]{1}>'s*)/i', '', $str);

这并不包括文本深处的段落标签

标签也是 (更新)

这是从PeeHaa建议的链接

派生出来的
// for the starting <p> tag
$str = preg_replace("#(<h[1-6].*?>)<p.*?>#", '$1', $str);
// for the ending </p> tag
$str = preg_replace("#<'/p>(<'/h[1-6]>)#", '$1', $str);

你不应该尝试用正则表达式解析html,尽管已经说过,因为这是html的一个子集,而不是一个完整的文档/嵌套布局,这是可能的:

preg_replace('/(<h([1-6])[^>]*>)'s?<p>(.*)?<'/p>'s?(<'/h'2>)/', "$1$3$4")

这里的测试用例:

http://codepad.org/oA2rtNP9

解析HTML代码

解析网址

php -解析HTML页面

还有很多很多人(我可以加100多个)。

基本上就是:

不要尝试使用正则表达式解析HTML。 HTML不是常规语言。

使用HTML解析器。

例如:http://php.net/manual/en/book.dom.php