Уроки модуля (3/4)
Извлечение URL-адресов и IP-адресов
В произвольном тексте (журналы, статьи, дампы) часто требуется извлечь URL-адреса. и IP-адреса. Давайте посмотрим на надежные шаблоны для обоих.
URL-адреса http/https
Pattern: https?:\/\/[\w.-]+(?:\:\d+)?(?:\/[^\s]*)?https?:\/\/-- схема с необязательнымs.[\w.-]+-- хост (домен, поддомены, возможноlocalhost).(?:\:\d+)?-- дополнительный порт.(?:\/[^\s]*)?-- необязательный путь до первого пробела.
Захватывает https://example.com, http://localhost:3000/api/users,
https://docs.dev/path?query=value.
IPv4
IPv4 представляет собой 4 десятичных октета, разделенных точками:
Pattern: \b(?:\d{1,3}\.){3}\d{1,3}\b"Достаточно хорошая" версия: она также принимает недопустимые значения, например
999.999.999.999. Для строгой версии вам потребуется чередование диапазонов.
(25[0-5]|2[0-4]\d|[01]?\d\d?), что намного длиннее.
Pattern (strict): \b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\bТочность против краткости
Сопоставление URL-адресов или IP-адресов требует соблюдения допусков по шаблону. Строгий валидатор IP проверяет, чтобы ни один октет не превышал 255. С другой стороны, практичный экстрактор обычно ищет упрощенные шаблоны и делегирует точную проверку выделенному коду.
Попробуйте это
Найдите в тексте каждый URL-адрес http или https. Схема + хост + необязательный путь.
Показать подсказку
https? для необязательного s, [\\w.-]+ для домена и группы (?:\\/[^\\s]*)? для дополнительного пути.
Решение доступно после 3 попыток
Обзор упражнения
Найдите каждый IPv4 (4 десятичных октета, разделенных точками). Разрешительная версия, без проверки 0-255.
Показать подсказку
Используйте (?:\\d{1,3}\\.){3}, чтобы повторить «октет + точка» 3 раза, затем \\d{1,3} в последний раз.
Решение доступно после 3 попыток
Дополнительная задача
Find all IPv4 addresses in the format `X.X.X.X` (composed of four 1-to-3 digit numbers separated by dots).
Показать подсказку
Use \b to enforce boundaries, (?:\d{1,3}\.){3} to repeat the octet and dot three times, and finally \d{1,3}.
Решение доступно после 3 попыток