Если вам нужно найти URL-адреса в тексте, вам не нужно соответствовать RFC (независимо от числа), это абсолютно бесполезно (и это почти невозможно с шаблоном, который следует стандарту, он будет слишком медленным, слишком сложный).
Все URL-адреса в тексте считаются действительными (и/или должны быть подтверждены или нет, прежде чем вставляться в текст людьми, производящими этот текст. Иными словами, это не ваша работа!).
Итак, вы должны найти другой подход. Чтобы сделать это, вы должны задать правильный вопрос: как отличить URL от текста?
Перечислим общие критерии
- URL-адрес может начинаться с протокола: HTTP, HTTPS, FTP, SFTP, FTPS, суслик, ...
- URL-адрес может начинаться с
www.
- URL-адрес не содержит пробельных символов
- URL-адрес начинается всегда с границы слова
- URL-адрес может заканчиваться перед символом пробела, концом строки, символом пунктуации, за исключением вопроса знак (который может присутствовать, даже если нет никаких параметров GET)
С этими требованиями, вы можете построить легко наивный шаблон для протокола HTTP:
\b(https?://|www\.)\S+(?=\s|[^\P{P}?]|\z)
Обратите внимание, что, как только вы получите В результате вы можете проверить правильность URL-адреса с помощью встроенной функции (что обычно не обрабатывает все случаи, но теперь вы знаете, почему :).
Возможный дубликат [Что является лучшим регулярным выражением, чтобы проверить, является ли строка допустимым URL?] (Http://stackoverflow.com/questions/161738/what-is-the-best-regular-expression-to -check-if-a-string-is-a-valid-url) –
какую платформу вы используете? – Steve
@ PM77-1: Он/она не пытается проверить, является ли URL-адрес действительным или нет, но только для поиска URL-адресов в тексте, это две совершенно разные задачи. –