Перейти к основному содержимому
Модуль 8 · Урок 3 из 431/32 в курсе~12 min
Уроки модуля (3/4)

Извлечение URL-адресов и IP-адресов

В произвольном тексте (журналы, статьи, дампы) часто требуется извлечь URL-адреса. и IP-адреса. Давайте посмотрим на надежные шаблоны для обоих.

URL-адреса http/https

Code
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 десятичных октета, разделенных точками:

Code
Pattern: \b(?:\d{1,3}\.){3}\d{1,3}\b

"Достаточно хорошая" версия: она также принимает недопустимые значения, например 999.999.999.999. Для строгой версии вам потребуется чередование диапазонов. (25[0-5]|2[0-4]\d|[01]?\d\d?), что намного длиннее.

Code
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. С другой стороны, практичный экстрактор обычно ищет упрощенные шаблоны и делегирует точную проверку выделенному коду.

Попробуйте это

Упражнение#regex.m8.l3.e1
Попыток: 0Загрузка…

Найдите в тексте каждый URL-адрес http или https. Схема + хост + необязательный путь.

Загрузка редактора…
Показать подсказку

https? для необязательного s, [\\w.-]+ для домена и группы (?:\\/[^\\s]*)? для дополнительного пути.

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#regex.m8.l3.e2
Попыток: 0Загрузка…

Найдите каждый IPv4 (4 десятичных октета, разделенных точками). Разрешительная версия, без проверки 0-255.

Загрузка редактора…
Показать подсказку

Используйте (?:\\d{1,3}\\.){3}, чтобы повторить «октет + точка» 3 раза, затем \\d{1,3} в последний раз.

Решение доступно после 3 попыток

Дополнительная задача

Упражнение#regex.m8.l3.e3
Попыток: 0Загрузка…

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 попыток