我採取了Liberal URL Regex from Daring Fireball,將它與some of Alan Storm improvements合併,並破解我的方式修復一些錯誤,如支持括號內的國際化域名(IDN)字符。這就是我:幫助黑客格魯伯的自由URL正則表達式
/(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/
但是我遇到,我不是能夠解決的錯誤:
'www.dsd(sd)sdsd.com' // can also be the valid 'www.dsd.com/whatever(whatever)'
以上URL被認定爲www.dsd(sd)sdsd.com'
(或www.dsd.com/whatever(whatever)'
)而不是www.dsd(sd)sdsd.com
(或www.dsd.com/whatever(whatever)
)。這似乎只發生時,URL有括號,因爲以下網址:
'www.sampleurl.com'
是否正確被識別爲www.sampleurl.com
。
我覺得當URL有括號,我一直在嘗試了一段時間,但我似乎無法找到一個解決方案不能被執行的正則表達式的[^[:punct:]\s]|\/
一部分。誰能幫我?
對於商品,我設置了一個Rubular permalink with the regex and some test data(最後一個URL失敗)。
我認爲格魯伯的正則表達式是有點倉促,比如它不匹配的URL,如:
http://en.wikipedia.org/wiki/Something_(Special)_For_You
我更感動的看到,無論Gruber和Alan錯過這真的簡單的拼寫錯誤:
\([\w\d]+\)
豈不\(\w+\)
夠嗎? :S
也似乎沒有工作(http://www.rubular.com/regexes/12851)。 – 2010-01-08 17:11:51
嗯,是的。我使用原始的Daring Fireball表達式(我自己使用)進行了測試。我不是正則表達式專家,所以在等待任何其他解決方案之前,我會刪除Alan Storm的改進(因爲我相信它們是無用的/不必要的) – 2010-01-09 04:30:52
Daring Fireball表達式僅在括號內匹配0-9a-Z。 – 2010-01-10 00:53:13