什么';PHP正则表达式中任何字符的正确语法是什么?我的例子不起作用

什么';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

我有一段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="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开发人员头脑中的奥秘所在。