正则表达式否定xml元素名称

时间:2014-03-13 12:09:51

标签: php xml regex

这可能是一个愚蠢的问题,但有人可以为我否定这个正则表达式吗?

$reg = '/^(?!XML)[a-z][\w0-9-]*$/i';

我已经尝试了[^ ...]但是没有真正有用,或者我只是做错了。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

[^...]语法仅适用于字符类。在字符类之外,^在行的开头断言位置。它不能用于否定正则表达式本身。你可以做的是使用PHP代码进行否定:if(!preg_match(...))

$reg = '/^(?!XML)[a-z][\w0-9-]*$/i';

if(!preg_match($reg, $stuff)) {
    # code...
}

但是,如果你要使用XML / HTML,那么正则表达式可能不是最好的方法。 改为使用XML解析器。这样,当标记格式发生变化时,您可以确保代码不会中断。

答案 1 :(得分:0)

试试这个:

$positive = '\A(?!XML)[a-z][\w-]*+\z';
$negative = "(?!$positive)\A";