我有這樣的代碼的preg_match排除一些
preg_match("/\bHTTP(.)+ (\d{3})/", $string)
在過去的模式我要檢查,可以通過任何數字組成,但不應該創建像404
或401
,怎一個號碼的3位數我可以做嗎?
我有這樣的代碼的preg_match排除一些
preg_match("/\bHTTP(.)+ (\d{3})/", $string)
在過去的模式我要檢查,可以通過任何數字組成,但不應該創建像404
或401
,怎一個號碼的3位數我可以做嗎?
解釋:
一個負先行?!
尋找與指定模式不匹配的文字。 一個積極的lookahead尋找一個模式匹配,但不返回。
http://www.regular-expressions.info/lookaround.html
?!
不符合下列 模式404|401
無論是404
或401
,所以|
用於替代但這個「?!」查看401 | 404模式或\ d {3}模式? – 2011-02-25 21:39:26
我不完全確定,但我認爲它的工作方式類似於沒有反向引用的子表達式,並且當它沒有找到404或401時它是成功的,所以匹配很好,並且與其餘部分保持一致。如果它找到其中一個,則匹配失敗,並停止執行3位數搜索。 – Stofke 2011-02-25 22:07:32
要排除的更值,則這樣會更復雜,但是
preg_match("/\bHTTP(.+) ([0-35-9]\d{2}|4[1-9]\d|40[0235-9])/", $string)
將匹配不與4啓動任何三位數字,
或,與4開始,但不與40啓動任何三位數字,
或任何三位數字,以40開頭,但不是401或404.
謝謝!是不是有一個表達式要排除,比如「^」?在我看來,我認爲這是可能的[0-9^404 | 401){3}。 – 2011-02-25 21:55:03
[^ 0-9]否定範圍內的所有字符 – Stofke 2011-02-25 22:00:53
'[^ ...]'將匹配任何**單個**字符,其** **不匹配「...」表達式(包括字符類別所以'[^ XYZ \ s \ d]'例如匹配非空白字符,非數字字符,既不是X,Y也不是Z的字符)。但它不能與任何其他語法結合來指定一個概念,如「匹配一組字符而不匹配另一組」。也就是說,你不能像'[\ d^4]'做任何事情說'匹配一個數字,但不匹配''4''。 – mob 2011-02-25 22:02:13
作品!如果我找對了,你檢查是否存在401或404,如果他們做的字符串不匹配,但由於它不是「強制性」的正則表達式將繼續,如果不存在。這是唯一的方法還是有辦法實際寫出「3位數字,除了這個3位數字」?這似乎更多的是「解決方法」 – 2011-02-25 21:25:33