第一個正則表達式與匹配ftp://,http://,https://的幾乎所有內容匹配,所以最好將其他語言實現爲獨立的表達式,因爲它們會只能匹配主機名。
對於數字1,您需要確定您希望如何匹配不同的頂級域名(.com/.net/etc)。例如,您可以像這樣明確地匹配它們:
(www\.)?[a-z0-9\-]+\.(com|net|org)
但是,這隻會匹配以.com,.net或.org結尾的網址。如果您需要所有頂級域名並且只有有效的域名,則需要手動將它們全部寫入到最後。或者,你可以做這樣的事情,
(www\.)?[a-z0-9\-]+\.[a-z]{2,6}
將接受任何看起來像一個網址,並以「點」,爲2〜6個字母(.museum和。旅行)的任意組合結束。但是,這將匹配「fgs.fds」之類的字符串。根據您的應用程序,您可能需要添加更多字符到[a-z]
,以添加對擴展字符字母的支持。
修改(2 Aug 14):正如下面的評論所指出的,這與TLD類似.co.uk。這裏是一個將:
(www\.)?[a-z0-9\-]+\.([a-z]{2,3}(\.?[a-z]{2,3})?)
而不是兩個和六個字符(經過一段時間)之間的任何字符串,這將匹配任何兩到三年,然後又一個三(如果存在的話),有或無分期。
這將是多餘的,但你可以改爲在第二個選項www後刪除問號,然後做兩個測試;這樣,您就可以匹配任何以公共TLD結尾的字符串或以「www」開頭的字符串。後面跟着一個句點分隔的字符「gpspps.cobg」。它仍然會匹配可能實際不存在的網站,但至少它看起來像一個網址,它看起來像一個網址。
對於YouTube的一個,我去了一個小問號瘋狂。
(?i:(?:(?:http(?:s)?://)?(?:www\.)?)?youtu(?:\.be/|be\.com/watch\?(?:[a-z0-9_\-\%\&\=]){0,}?v\=))([a-zA-Z0-9_\-]{11}){0,}?v\=))(?i)([a-zA-Z0-9_\-]{11})
編輯:我只是試圖在我自己的項目中使用上述正則表達式,但我遇到了一些錯誤。我改變了一點,我覺得這個版本可能會更好:
(?i:(?:(?:http(?:s)?://)?(?:www\.)?)?youtu(?:\.be/|be\.com/watch\?(?:[a-z0-9_\-\%\&\=]){0,})?)(?:v=)?([a-zA-Z0-9_\-]{11})
對於那些不熟悉規則表達式,括號,(...regex...)
,存儲爲組,可以有選擇地挑選出匹配的字符串。以?:
開頭的括號組在上面的大多數中是(?:www\.)
,但是不在組內。因爲正則表達式的結尾卻剩下來,這樣的正「俘獲」 -group,([a-zA-Z0-9_\-]{11})
,您使用的功能$matches
說法像preg_match,那麼你可以使用$matches[1]
來獲取視頻,「examplevide」的YouTube的ID,然後工作不過你會喜歡它。另請注意,正則表達式只能匹配11個字符的ID。
此正則表達式匹配幾乎任何當前YouTube網址格式,包括不正確的情況下,進出(正常)訂單參數:
http://youtu.be/dQw4w9WgXcQ
https://www.youtube.com/watch?v=dQw4w9WgXcQ
http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=featured
http://www.youtube.com/watch?feature=featured&v=dQw4w9WgXcQ
http://WWW.YouTube.Com/watch?v=dQw4w9WgXcQ
http://YouTube.Com/watch?v=dQw4w9WgXcQ
www.youtube.com/watch?v=dQw4w9WgXcQ
不要太嚴格什麼的網址與你或結束將使用其他路徑信息(如www.something.co.uk/about)排除非美國網站和網址。 – nnnnnn
提示:(。ABC * | * HIJ)的正則表達式''匹配以'abc'開始或'hij' – justhalf