網上找了個匹配網址的Regex(
^http:\/\/[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$),但是有很多網址不能匹配到
比如:
網址:
http://www.sz.gov.cn/cn/hdjl/zxts/dfyj/
執行結果:
boolean false(意思就是這不是個網址)
求一個能匹配任意網址的Regex(執行效率越快越好)。
謝謝
找了一個可用的:
((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
執行效率不知道有沒有更快的
回複內容:
網上找了個匹配網址的Regex(^http:\/\/[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$),但是有很多網址不能匹配到
比如:
網址:http://www.sz.gov.cn/cn/hdjl/zxts/dfyj/
執行結果:boolean false(意思就是這不是個網址)
求一個能匹配任意網址的Regex(執行效率越快越好)。
謝謝
找了一個可用的:
((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
執行效率不知道有沒有更快的
這有一個 Markdown 的作者之一寫的Regex(原文在這)。他把這個運算式都改進了好幾年了,應該比較全面而且保險:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))
測試代碼:
]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))@';var_dump( preg_match($regex, 'http://segmentfault.com/q/1010000000584340') ); //true
除非涉及的資料量特別特別大,否則單單一個Regex還達不到影響效能的程度吧。基本不必擔心效率問題的。
/^((http|ftp|https):\/\/)?[\w-_.]+(\/[\w-_]+)*\/?$/
這個可以匹配你上給的網址。
其實正則怎麼寫,還是得看你要匹配什麼樣的url。
既然是任意類型的網址,那就無所謂協議。/[a-z]+:\/\/[a-z0-9_\-\/.%]+/i