2013-10-31 37 views
-1

我正在編寫一個自定義URL檢測器,用於過濾目的,但是存在非URL錯別字的問題。正則表達式「沒有後跟」

在英語中,用句點分隔的兩個句子應該有一個空格,但在大多數情況下,用戶不遵守這個規則。

我必須匹配沒有協議前綴的URL,基本上只有域名和2或3個字符的TLD。如何排除超過TLD 3字符規則的字符串?

例子:

youtube.com (should match) 

something.This (fragment of a sentence. Should not match because "This" contains 4 chars.) 

注意,這些字符串可以在草堆(開始,中間,結束)在任何地方。我現在正則表達式是這樣的:

.'((https?|ftp)://)?'   // Protocol (optional) 
.'(www(\.|\%2[Ee]))?'   // www prefix (optional) 
.'([a-zA-Z-]+(\.|\%2[Ee]))+' // domain strings separated by dot 
.'([a-zA-Z-]{2,3})'   // tld 2 or 3 chars (should not be followed by another alpha) 
.'([/\?]\S*)*'    // subdirectory or GET (optional) 
+0

你爲什麼LIMI將tld分成2或3個字符? 「博物館」或「信息」怎麼樣......當你有什麼東西時,你想要什麼? – Toto

回答

1

如果我要修改相應的成就正則表達式的話,我會去檢查頂級域名後加上正向前查找

((https?|ftp):\/\/)?(www(\.|\%2[Ee]))?([a-zA-Z-]+(\.|\%2[Ee]))+([a-zA-Z-]{2,3}(?=\W|\b))([\/\?]\S*)* 

您可以在這裏看到:

((https?|ftp)://)?   // Protocol (optional) 
(www(\.|\%2[Ee]))?   // www prefix (optional) 
([a-zA-Z-]+(\.|\%2[Ee]))+ // domain strings separated by dot 
([a-zA-Z-]{2,3}(?=\W|\b)) // ... following a non-word character or a word boundary 
([/\?]\S*)*    // sub directory or GET (optional) 

Live demo

+0

我最近了解到了關於單詞邊界的感謝:) –