Я взял Regex для либерального URL из Daring Fireball , объединил его с некоторыми улучшениями Alan Storm и взломал мой способ исправления некоторых ошибок, таких как поддержка символов IDN в скобках , Вот что я имею:
/(?:[\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 содержит круглые скобки, поскольку следующий URL:
'www.sampleurl.com'
правильно распознается как www.sampleurl.com
.
Я думаю, часть регулярного выражения [^[:punct:]\s]|\/
не выполняется, когда URL содержит круглые скобки , я пытался в течение некоторого времени, но, похоже, не могу найти решение. Кто-нибудь может мне помочь?
Для товара я настроил Рубульную постоянную ссылку с регулярным выражением и некоторыми тестовыми данными (последний URL не пройден).
Я думаю, что регулярное выражение Грубера было немного поспешным, например, оно не соответствует URL, например:
http://en.wikipedia.org/wiki/Something_(Special)_For_You
Я еще больше впечатлен, увидев, что и Грубер и Алан пропустили эту действительно простую опечатку:
\([\w\d]+\)
Разве \(\w+\)
не хватит? : S