2010-03-01 88 views
0

爲僞正則表達式提供示例:根據PHP regexp語法匹配除example.com和example2.com以外的每個url。PHP正則表達式匹配除Example.com以外的任何URL

這裏是我到目前爲止,但它不工作:

$patternToMatch = "@https?://[^(example.com|example2.com)]\"*@i"; 
+0

這功課嗎?如果是這樣,請標記爲。 – 2010-03-01 20:04:01

+0

哈哈,沒有。這不是功課。我只是新的正則表達式。但感謝侮辱!如何回答? – darkAsPitch 2010-03-01 20:39:49

+0

不是侮辱;只是質量控制。通常以這種方式表達的問題是 - 看看第一段看起來有點像作業的要求。這是所有:) – Matchu 2010-03-01 21:50:03

回答

1

這裏的問題是,一個類定義中([])特殊字符,如(|失去了意義。

更好的解決方案是在example.com或example2.com上進行匹配,然後僅進行負面測試。

+0

感謝Segfault,看起來我必須刪除所有example.com網址,然後搜索任何剩餘的網址,對嗎?再次感謝! – darkAsPitch 2010-03-01 20:47:05

2

不要使用正則表達式的東西你不需要。

$parts = parse_url($url); 
if ($parts && $parts['host'] != 'example.com' && $parts['host'] != 'example2.com') { 
    // the URL seems OK 
} 
+0

Lukas,我試圖從文本文檔中提取網址。我手邊沒有這些網址。我確實需要正則表達式。 – darkAsPitch 2010-03-01 20:40:08

1

不,方括號內的內容只會匹配一個字符。例如,正則表達式:

[^example] 

將比example匹配任何單個字符以外。

嘗試負lookahead

@https?://(www\.)?(?!example2?.com)@i 
0

你幾乎擁有了答案。 這將做你想要的匹配。

$patternToMatch = "@https?://(example.com|example2.com)@i"; 
+0

感謝aberpaul,但看起來它只會找到example.com和example2.com - 我想要的一切,但example.com和example2.com – darkAsPitch 2010-03-02 00:26:36

+0

我假設(也許錯了),你將能夠使用PHP?檢查匹配是否返回true/false。沿着這些線我可以看到段錯誤思想。 – aberpaul 2010-03-03 17:09:05