PHP:Regex匹配任意類型的網址

來源:互聯網
上載者:User
網上找了個匹配網址的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

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.