2010-01-20 144 views
2

下面發佈的正則表達式用於拾取URL,包括格式爲example.com等格式的URL。不過,我希望它只能在前面有www.httphttps等的網址中找到。換句話說,它應該拿起www.example.com。它不應該拿起example.comURL的正則表達式

((((ht|f)tp(s?))\://)?((www.|[a-zA-Z])([a-zA-Z0-9\-]+\.)([a-zA-Z]{2,8}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))*) 
+0

那麼它工作還是什麼? – danben 2010-01-20 16:00:33

+0

您確定只想匹配美國域名嗎?其他國家在TLD部分有一個額外的網址:www.bbc.co.uk或www.tmnet.com.my。 – slebetman 2010-01-20 16:17:10

+0

此表達式已適用於提取包含子域名的網址。這是行不通的,因爲我希望它只拾取以www開頭的URL。或http: 菲利普G已經解決了這個問題,所以他更新的表達是最適合我的。 – Mike 2010-01-20 16:24:58

回答

1

嗯嘗試

(((((ht|f)tp(s?))\://)|(www\.))((|[a-zA-Z])([a-zA-Z0-9-]+.)([a-zA-Z]{2,8}))(\:[0-9]+)*(/($|[a-zA-Z0-9.\,\;\?\'\+&%\$#\=~_-]+))*)

編輯: 是的,我並沒有真正測試之一。好吧,我也沒有測試這種之一,但我看着它真的很用心;)

(((((ht|f)tp(s?))\://)|(www\.))(([a-zA-Z0-9-]+.)?([a-zA-Z0-9]+\.)([a-zA-Z]{2,8}))(\:[0-9]+)*(/($|[a-zA-Z0-9.\,\;\?\'\+&%\$#\=~_-]+))*)

你應該看看一個良好的正則表達式測試儀。我通常使用Expresso,但有很多其他的。

+0

這一個似乎隨機切斷。例如,嘗試http://www.yahoo.com時,會切斷.com。對於使用http://的其他實例也會發生這種情況,因此它並不總是在.com處。 – Mike 2010-01-20 16:36:18

+0

@Mike:新的表達,試試吧。 – FrustratedWithFormsDesigner 2010-01-20 16:51:58

+0

謝謝!它工作得更好。我會做更徹底的測試,但以前的所有問題似乎都已解決。 – Mike 2010-01-20 18:31:53

0

我修改你的表達:

((((ht|f)tp(s?))\://)?((www\.)([a-zA-Z0-9-]+\.)([a-zA-Z]{2,8}))(\:[0-9]+)*(/($|[a-zA-Z0-9.\,\;\?\'\+&%\$#\=~_-]+))*) 

一個不錯的網站,在這裏檢查您的表達式:http://gskinner.com/RegExr/

+0

這工作正是我想要的方式。非常感謝! – Mike 2010-01-20 16:25:27

+0

對不起。沒有經過徹底的測試,我的回答太快了。它確實檢查www。等等。但是,它不再選擇帶有子域的URL。 – Mike 2010-01-20 16:33:34

1

驗證該URI與正則表達式合式 - 使用一個出來的RFC驗證它與代碼是否合理。試圖將格式正確和合理的檢查合併爲一個正則表達式太難以正確使用。請參閱:Need a regex to validating a Url...

+0

好點,在驗證輸入完成後很可能更容易拒絕特殊情況。 – FrustratedWithFormsDesigner 2010-01-20 16:15:17

+0

我會給它一個鏡頭。 – Mike 2010-01-20 16:36:49

0

在這裏你去:

\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.])(?:[^\s()<>]+|\([^\s()<>]+\))+(?:\([^\s()<>]+\)|[^`!()\[\]{};:'".,<>?«»「」‘’\s])) 

這是修改後的自由URL來自Daring Fireball的正則表達式。

+0

感謝您的幫助。這個表達式包含一個問題,它可以提取www之前的所有內容。或http: 例如: asfjkljswww.yahoo。com 正則表達式會在這行中包含asfj-etc等所有內容。我將在下面發表的文章似乎是迄今爲止最有希望的: (((((ht | f)tp(s?))\://()|(www \。))(([a-zA -Z0-9 - ] +)([A-ZA-Z0-9] + \)([A-ZA-Z] {2,8}))(\:[0-9] +)*。?。 (/($|[a-zA-Z0-9.\,\;\?\'\+&%\$#\=~_-]+)*) 對於這個表達式,Credit轉到FrustratedWithFormsDesigner。 – Mike 2010-01-21 17:00:37

+0

@Mike:我提供的正則表達式與'asfjkljswww.yahoo.com'不匹配,請再次檢查。 – 2010-01-21 17:13:22

+0

你是對的。當我複製它時,我一定犯了一個錯誤。這工作得很好。感謝您的幫助! – Mike 2010-01-26 16:00:47