如何使用preg_replace从特定html标记中删除所有属性?

时间:2015-02-18 07:48:52

标签: php html regex

考虑一个php变量,其中包含一个文本字符串,此文本包含一些html代码,如果我想从<br>但不是<spam>

等元素中删除属性,请说

php变量中包含的字符串将是这样的:

<br id="foo" style="display:none">
<span id="bar">sometext</span>
<br id="bun" />

将成为这个:

<br>
<spam id="bar">sometext</span>
<br />

注意:我想要一个正则表达式,我可以手动更改标记名称,如:

<?php

$str='<br id="foo" style="display:none">
<spam id="bar">sometext</span>
<br id="bun" />';

$tagname = 'br'
$regex = "regexpar1".$tagname."regexpart2";

echo preg_replace($regex,'',$str);

非常感谢

编辑: 解决方案(感谢@ avinash-raj)

$str='<br id="foo" style="display:none">
<span id="bar">sometext</span>
<br id="bun" />';

$tagname = 'br';

echo preg_replace('~(<'.$tagname.')\b[^>]*?(?=\h*\/?>)~','\1',$str);

3 个答案:

答案 0 :(得分:1)

使用preg_replace功能。

preg_replace('~(<br)\b[^>]*?(?=\h*\/?>)~', '\1', $str);

DEMO

\h匹配任何类型的水平空格字符。

答案 1 :(得分:0)

只需在php变量中获取id和style,然后对它们执行任何操作。这里是(记得为每个人制作一个唯一的ID)

$id="somthing";
$style="style="display:none"";

只需在id和style的地方回复它们。

答案 2 :(得分:0)

正则表达式

你可以试试这个:

(<)(br|div)([^>]+?)(\/?\s*>)

Regular expression visualization

正如您在上图中所看到的,您可以手动调整Group 2以满足您的需求。在图片上,正则表达式配置为查找brdiv标记。

DEMO

用法

echo preg_replace( '/(<)(br|div)([^>]+?)(\/?\s*>)/', '\1\2\4', $str);

/是此处正则表达式的分隔符。只要它是非字母数字,非反斜杠,非空白字符,您就可以使用任何其他字符。这就是为什么/在此帖子的第一个正则表达式中以\开头。

以下是其他分隔符分隔的正则表达式的示例:

echo preg_replace( '%(<)(br|div)([^>]+?)(/?\s*>)%', '\1\2\4', $str);
echo preg_replace( '+(<)(br|div)([^>]+?)(/?\s*>)+', '\1\2\4', $str);
echo preg_replace( ',(<)(br|div)([^>]+?)(/?\s*>),', '\1\2\4', $str);

Avinash在帖子中使用~