使用preg_replace匹配html标记样式属性

时间:2014-07-13 08:46:41

标签: php regex preg-replace

我有以下正则表达式:

preg_replace('#&lt;(/?(?:pre|p|b|em|u|ul|li|ol|blockquote|h1|h2|h3|h4|h5|strong|br))&gt;#', '<\1>', $this->body);

它可以替换没有样式属性的标记,如:

<p>, <b>, <li>

但是我试图让它与样式属性匹配标签,例如:

<p style="margin-left: 20px"> and <p style="text-align: right;">.

我该怎么做?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

试试这个:

<(/?(?:pre|p|b|em|u|ul|li|ol|blockquote|h1|h2|h3|h4|h5|strong|br))(?: +[a-z]+="[^"]*")*>

最后一部分:

(?: +[a-z]+="[^"]*")*

匹配attributes =“xxxxx”

答案 1 :(得分:0)

  

表单评论:我只需要样式属性 - 仅适用于<p> - 标签!

从索引1获取匹配的组。

<p.*(style="[^"]*")[^>]*>

Online demo


  

表单注释:应省略除style属性之外的所有其他属性!

尝试以下示例代码,仅使用样式属性替换p标记。

示例代码:

$re = "/<p.*(style=\\"[^\\"]*\\")[^>]*>/m";
$str = "<p style=\"margin-left: 20px\" align=\"left\">\n<p align=\"left\">\n<p align=\"left\" style=\"margin-left: 20px\">\n";
$subst = '<p $1>';

$result = preg_replace($re, $subst, $str); 

Grabbing HTML Tags

上查找详细说明