2014-01-05 213 views
-2

我寫了一個正則表達式來匹配URL,以便在評論系統中對帖子執行str_replace()並用活動的可點擊鏈接替換裸鏈接。正則表達式與非url匹配

這工作得很好:

(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\??(([a-zA-Z0-9]*=[a-zA-Z0-9]*)&?)*\/? 

匹配的URL相當不錯,但它未能在這一行:

「我知道,但是你的名字不在名單上看到... http://screencast.com/t/ccccccc

它與[see ... http]部分匹配。

怎麼了?

+1

你怎麼測試呢?你使用什麼語言或圖書館? (請看你使用的標籤的描述) –

+1

這個正則表達式有很多問題(將匹配非URL,不會完全匹配一些URL--比如'http://thisISatestxr.com?123'),你看到的只是其中之一。 – acdcjunior

回答

1

,該協議(該http://https://)匹配的圖案的部分是可選的。此外,該模式的部分旨在匹配URL的查詢(在?之後的URL部分)。

糾正這兩個問題,它應該工作:

(https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\??(&?([a-zA-Z0-9]*=[a-zA-Z0-9]*))* 

Demonstration

但是我們可以改善這一點:

(https?://)[\da-z.-]+(\.[a-z0-9-]+)+(\:\d+)?)(/[\w.-]*)*(\?\S+)? 

Demonstration

。當然,這是直到近似。對於更詳細和更完整的模式,您應該閱讀In search of the perfect URL validation regex,其中作者提供了一些模式並顯示其優缺點。

+0

@ joeytje50更正。看到我更新的答案。 –

0
(https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\??(([a-zA-Z0-9]*=[a-zA-Z0-9]*)&?)*\/? 

Live demo