2014-03-13 70 views
1

這可能是愚蠢的問題,但有人可以否定這個正則表達式對我來說?正則表達式否定xml元素名稱

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

我試過[^ ...]但不是真的有效,或者我只是做錯了。 在此先感謝!

+0

我也建議你使用'\ A'和'\ z',而不是'^'和'$'。 **'$'可能包含LF ** – mpyw

+0

我注意到'[\ w0-9-]'等於'[\ w-]'。 – mpyw

回答

1

[^...]語法僅適用於字符類。在角色等級之外,^在該行的開始處聲明位置。它不能用來否定正則表達式本身。你能做到什麼,而不是,是用PHP代碼做了否定:if(!preg_match(...))

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

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

但是,如果你要與XML/HTML工作,那麼正則表達式是不是可能是最好的辦法。 改爲使用XML解析器。這樣,當標記的格式發生變化時,您可以確定您的代碼不會中斷。

+0

函數** simplexml_load_file **和** simplexml_load_string **綁定在普通的PHP5中。 – mpyw

+0

感謝您的回覆事情是我需要preg_replace的正則表達式「否定」本質上需要在XML元素名稱中替換錯誤的字符,所以!preg_match不完全是我需要的。 – ABCD

+0

那麼,你最終的目標是什麼? – mpyw

0

試試這個:

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

會不會,謝謝! – ABCD