Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用preg_replace删除特定html标记中的所有属性?_Php_Html_Regex - Fatal编程技术网

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

Php 如何使用preg_replace删除特定html标记中的所有属性?,php,html,regex,Php,Html,Regex,考虑一个包含文本字符串的php变量,该文本包含一些html代码,比如说如果我想从元素中删除属性,比如,而不是从 php变量中包含的字符串如下所示: <br id="foo" style="display:none"> <span id="bar">sometext</span> <br id="bun" /> 一些文字 )~”、“\1”、$str); \h匹配任何类型的水平空白字符。只需在php变量中获取id和样式,并根据需要对其执行任何操

考虑一个包含文本字符串的php变量,该文本包含一些html代码,比如说如果我想从元素中删除属性,比如

,而不是从

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);

使用
preg\u replace
功能

preg_replace('~(<br)\b[^>]*?(?=\h*\/?>)~', '\1', $str);
preg\u replace(“~(]*?(?=\h*\/?>)~”、“\1”、$str);


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

只需在php变量中获取id和样式,并根据需要对其执行任何操作。这里就是(记住为每个变量创建唯一的id)

只需在id和样式处重复它们。

正则表达式 您可以尝试以下方法:

(<)(br|div)([^>]+?)(\/?\s*>)
/
是此处正则表达式的分隔符。您可以使用任何其他字符,只要它是非字母数字、非反斜杠、非空白字符。这就是为什么在本文的第一个正则表达式中,
/
前面有一个
\

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

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_替换('%(]+?)(/?\s*>)%,'\1\2\4',$str);
echo preg_替换('+(]+?)(/?\s*>)+'、'\1\2\4'、$str);
echo preg_替换(',(]+?)(/?\s*>),','\1\2\4',$str);

在他的帖子中使用了一个
~

我看不到HTML标记移除和正则表达式之间的联系。我在你的帖子中也没有看到PHP或JScript。刚刚添加了所有这些,感谢你的帮助,无论是关于这个问题还是关于noob问题的帖子。非常感谢你给出的具体答案,非常棒,这有助于理解这个概念,但是在PHP上我在第2行的D:\www\test.php中得到了一个
警告:preg\u replace():未知修饰符“(”,当我尝试这样做时:
echo preg\u replace(“(]+?)(\/?\s*>)”,“,”,$str);
@ccrez请看我帖子中的更新。非常棒,非常感谢!这正是我所需要的,它就像一个魅力,非常感谢
(<)(br|div)([^>]+?)(\/?\s*>)
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);