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

时间:2013-04-04 19:46:23

标签: php html regex preg-replace

我有一段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是什么。可以有任何东西。

3 个答案:

答案 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"/>
*/