我有一段HTML代码作为字符串:
<input id="an_id" name="a_name" value="some_value" class="a_class" type="text"/>
我想用正则表达式和preg_replace去掉name属性及其值:
preg_replace('/name\="(.*)"/', '', $html, 1);
但是这会输出:
<input id="an_id" />
任何人都可以帮助我吗?为什么删除那么多?属性的正则表达式为name
,(.*)
因为我不关心值中的char是什么。可以有任何东西。
答案 0 :(得分:1)
不合时宜(见Possible Modifiers):
preg_replace('/name\="(.*)"/U', '', $html, 1);
结果:
<input id="an_id" value="some_value" class="a_class" type="text"/>
或者@John Conde评论说,使用DOM Parser。
答案 1 :(得分:1)
您不希望匹配任何字符,您正在寻找除"
以外的任何字符。此外,捕获组()
不是必需的,因为您没有使用替换中的值,我不知道您为什么要转义=
,因为它不是特殊字符。
preg_replace('/name="[^"]*"/', '', $html, 1);
答案 2 :(得分:1)
原始,但它应该让你去。
<?php
function remove_attribute($attribute, $html) {
return preg_replace(
sprintf('~%s="[^"]+"\s?~', preg_quote($attribute)),
null,
$html
);
}
$html = '<input id="an_id" name="a_name" value="some_value" class="a_class" type="text"/>';
echo remove_attribute('name', $html);
/*
<input id="an_id" value="some_value" class="a_class" type="text"/>
*/