考虑一个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);
答案 0 :(得分:1)
答案 1 :(得分:0)
只需在php变量中获取id和style,然后对它们执行任何操作。这里是(记得为每个人制作一个唯一的ID)
$id="somthing";
$style="style="display:none"";
只需在id和style的地方回复它们。
答案 2 :(得分:0)
你可以试试这个:
(<)(br|div)([^>]+?)(\/?\s*>)
正如您在上图中所看到的,您可以手动调整Group 2
以满足您的需求。在图片上,正则表达式配置为查找br
或div
标记。
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在帖子中使用~
。