Мне нужна помощь в создании регулярного выражения, которое может правильно соответствовать URL-адресу внутри свободного текста.
[a-zA-Z]{2,6}
Вот что я могу узнать о поддоменах:
«Субдомен» выражает относительную зависимость, а не абсолютную зависимость: например, wikipedia.org содержит субдомен домена org, а en.wikipedia.org содержит субдомен домена wikipedia.org. Теоретически это подразделение может опускаться до 127 уровней в глубину, и каждая метка DNS может содержать до 63 символов, если полное доменное имя не превышает общую длину 255 символов.
Что касается самого имени домена, я не смог найти надежный источник, но я думаю, что регулярное выражение для не IDN (я не уверен, как писать версию, совместимую с IDN), это что-то вроде:
[0-9a-zA-Z][0-9a-zA-Z\-]{2,62}
Может ли кто-нибудь помочь мне с этим регулярным выражением или указать мне хорошее направление?
Джон Грубер, известность Daring Fireball, недавно опубликовал сообщение, в котором подробно описывается его поисковая строка с регулярным выражением URL. То, что он придумал, было следующим:
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
Который, по-видимому, работает и с Юникод-содержащими URL-адресами. Вам нужно будет сделать небольшую модификацию, чтобы получить остальную часть того, что вы ищете – схему, имя пользователя, пароль и т. Д. Алан Шторм написал статью, объясняющую шаблон регулярного выражения Грубера , который мне определенно необходим (регулярное выражение поэтому write-once-have-no-clue-how-to-read-ever-again!).
Если вам нужен протокол и вы не слишком беспокоитесь о ложных срабатываниях, гораздо проще всего совместить все символы без пробелов ://
Это даст вам большую часть пути. Если вам это нужно более подробно, укажите данные теста.
(ftp|https?)://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?