0

我有一段 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 是什么。什么都可以。

4

3 回答 3

1

让它变得不贪婪(请参阅可能的修饰符):

preg_replace('/name\="(.*)"/U', '', $html, 1);

结果:

<input id="an_id"  value="some_value" class="a_class" type="text"/>

或者正如@John Conde 评论的那样,使用DOM Parser

于 2013-04-04T19:52:40.393 回答
1

您不是要匹配任何字符,而是要查找除". 此外,捕获组()不是必需的,因为您没有在替换中使用该值,而且我不知道您为什么要转义=,因为它不是特殊字符。

preg_replace('/name="[^"]*"/', '', $html, 1);
于 2013-04-04T19:53:20.560 回答
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"/>
*/
于 2013-04-04T19:53:24.407 回答