Вот регулярное выражение, которое я сделал, который извлекает различные части из URL:
^((?:https?|ftp):\/\/?)?([^:/\s.]+\.[^:/\s]|localhost)(:\d+)?((?:\/\w+)*\/)?([\w\-.]+[^#?\s]+)?([^#]+)?(#[\w-]+)?$
((?:https?|ftp):\/\/?)?
(группа 1) : извлекает протокол
([^:/\s.]+\.[^:/\s]|localhost)
(группа 2) : извлекает имя хоста
(:\d+)?
(группа 3) : извлечение номера порта
((?:\/\w+)*\/)?([\w\-.]+[^#?\s]+)?
(группы 4 и 5) : извлекает часть пути
([^#]+)?
(группа 6) : извлекает часть запроса
(#[\w-]+)?
(группа 7) : извлекает хэш-часть
Для каждой части перечисленного выше регулярного выражения вы можете удалить окончание ?
, чтобы принудительно его (или добавить, чтобы сделать его факультативным). Вы также можете удалить ^
в начале и $
в конце регулярного выражения, чтобы ему не требовалось совпадать со всей строкой.
См. На regex101 .
Примечание: это регулярное выражение не является безопасным на 100% и может принимать некоторые строки, которые не обязательно являются допустимыми URL-адресами, но он действительно проверяет некоторые критерии. Его основная цель состояла в том, чтобы извлечь различные части URL, чтобы не проверять его.