什么';PHP正则表达式中任何字符的正确语法是什么?我的例子不起作用
我有一段html代码作为字符串:什么';PHP正则表达式中任何字符的正确语法是什么?我的例子不起作用,php,html,regex,preg-replace,Php,Html,Regex,Preg Replace,我有一段html代码作为字符串: <input id="an_id" name="a_name" value="some_value" class="a_class" type="text"/> 但这会产生: <input id="an_id" /> 有人能帮我吗?为什么要删除这么多?regex是属性的name和(.*),因为我不在乎值中的字符是什么。可以有任何东西。将其取消冻结(请参阅): 结果: <input id="an_id" value="som
<input id="an_id" name="a_name" value="some_value" class="a_class" type="text"/>
但这会产生:
<input id="an_id" />
有人能帮我吗?为什么要删除这么多?regex是属性的name
和(.*)
,因为我不在乎值中的字符是什么。可以有任何东西。将其取消冻结(请参阅):
结果:
<input id="an_id" value="some_value" class="a_class" type="text"/>
或者如@John Conde所评论的,使用一个。将其取消冻结(请参阅):
结果:
<input id="an_id" value="some_value" class="a_class" type="text"/>
或者,正如@John Conde所评论的,使用一个。你不是要匹配任何字符,而是要匹配除
“
之外的任何字符。此外,捕获组()
不是必需的,因为您没有在替换中使用值,而且我不知道为什么要转义=
,因为它不是特殊字符
preg_replace('/name="[^"]*"/', '', $html, 1);
您没有寻找匹配任何字符,而是寻找除
“
以外的任何字符。另外,捕获组()
是不必要的,因为您没有在替换中使用值,而且我不知道为什么要转义=
,因为它不是特殊字符
preg_replace('/name="[^"]*"/', '', $html, 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"/>
*/
原语,但它应该可以让您继续
<?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"/>
*/
@johncode整个页面?是的,坏主意。像这样的一个标签?为什么不?@johncode整页?是的,坏主意。像这样的一个标签?为什么不呢?我想,=的转义是由preg_quote()完成的。好吧,医生说它可以做到这一点。仍然很奇怪,因为=
只出现在前瞻中,但它是3个字符序列中的第三个字符,(?=…)
,我不明白为什么它需要转义。。。但这就是PHP开发人员心中的奥秘所在。我认为,=的转义是由preg_quote()完成的。好吧,文档说它可以做到这一点。仍然很奇怪,因为=
只出现在前瞻中,但它是3个字符序列中的第三个字符,(?=…)
,我不明白为什么它需要转义。。。但这就是PHP开发人员头脑中的奥秘所在。