我已经考虑了一段时间了。
我有这个字符串(在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