我計算出這個表達式並在其工作接近,但只多了一個問題,它的任何字匹配與超過一個週期PHP正則表達式的URL
例如(。):塞入...(GOT匹配)
如何在正則表達式中限制句號爲「每個括號只允許1個句點」?
'#((\w+://)?(\w+\.)([a-z0-9\-/.?=_&%])+)#i'
我計算出這個表達式並在其工作接近,但只多了一個問題,它的任何字匹配與超過一個週期PHP正則表達式的URL
例如(。):塞入...(GOT匹配)
如何在正則表達式中限制句號爲「每個括號只允許1個句點」?
'#((\w+://)?(\w+\.)([a-z0-9\-/.?=_&%])+)#i'
試試這個:
'#((\w+://)?(\w+)(\.[a-z0-9\-/?=_&%]+)+)#i'
這需要每個週期後的非週期炭。
但我會建議是這樣的:
'#((\w+://)?\w+(\.[a-z0-9\-]+)*\.[a-z\-]{2,}(/[\w\-./?=&%]*)?)#i'
這應該工作:
[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}
在你使用正則表達式的問題是,您使用的字符類,包括你的時期貪婪版的「+」。我在這裏發佈的正則表達式只檢查名稱中的單個常量。
此模式將成功匹配google.com,www.google.com以及任意數量的子域名。
注意:ICANN最近宣佈很快他們將允許任何頂級域名(例如,而不是隻是.com,.org等,他們將很快允許.whatever),因此您可能需要調整最後一部分的正則表達式「{2,4}」,因爲TLD不久將是任意長度的。
好吧,如果你想驗證的URL,爲什麼不使用parse_url()?我認爲爲這麼多不同的URL表單創建一個普通的正則表達式很困難
\。{1}正常工作,但我不知道php :-) –
它是一個preg_match來替換文本中的鏈接。所以也許過濾器不能幫助? 我嘗試了{1},但是如果我放入,我會收到錯誤: '#((\ w +://)?(\ w + \。)([a-z0-9 \ - /。{ 1}?= _&%])+)#i' – pakito
Pakito,當您提出有關URL的問題時,您會參考RFC?也很好地瞭解該協議。這是專門爲http和https協議? – hakre