Найти в Дзене

Регулярные выражения (Regex). Перестаем бояться начинаем пользоваться.

Оглавление

Регулярные выражения (Regex, от англ. Regular Expressions) — это инструмент для работы с текстом, который используется для поиска, сопоставления и манипулирования строками. Regex применяются в различных задачах вроде валидации ввода, поиска по тексту, замены символов и многим другим.

Основные составляющие регулярных выражений

1. Литералы (буквы и цифры)

Строки, состоящие из букв и цифр, сопоставляются напрямую. Например, регулярное выражение cat найдет строку "cat" в тексте.

2. Специальные символы

Регулярные выражения используют специальные символы для создания более сложных шаблонов:

  • . — точка сопоставляется с любым одиночным символом, кроме новой строки.
  • ^ — начало строки. Например, ^cat соответствует строкам, которые начинаются с "cat".
  • $ — конец строки. Например, cat$ соответствует строкам, которые заканчиваются на "cat".
  • * — предшествующий символ или группа может повторяться 0 или более раз.
  • + — предшествующий символ или группа может повторяться 1 или более раз.
  • ? — предшествующий символ или группа может повторяться 0 или 1 раз (делает символ необязательным).
  • | — оператор "или". Например, cat|dog соответствует строкам, содержащим "cat" или "dog".
  • [] — набор символов. Например, [abc] соответствует одному из символов "a", "b" или "c".
  • () — группировка символов. Например, (cat|dog) соответствует "cat" или "dog".

3. Квантификаторы

Квантификаторы используются для указания повторений символов или групп:

{n} — ровно n повторений. Например, a{3} соответствует "aaa".

{n,} — n или более повторений. Например, a{2,} соответствует "aa", "aaa", и т.д.

{n,m} — от n до m повторений. Например, a{1,3} соответствует "a", "aa" или "aaa".

4. Классы символов

  • \d — соответствует любой цифре (0-9).
  • \D — соответствует любому символу, кроме цифры.
  • \w — соответствует любому "словесному" символу: буквы, цифры и знак подчеркивания (_).
  • \W — соответствует любому не "словесному" символу.
  • \s — соответствует любому пробельному символу (пробел, табуляция, перенос строки).
  • \S — соответствует любому символу, кроме пробельного.

5. Экранирование

Если нужно использовать специальные символы (., *, +, ?, и т.д.) как обычные символы, их нужно экранировать с помощью обратного слэша (\). Например, чтобы найти точку в тексте, нужно использовать выражение \..

Примеры регулярных выражений

1. Поиск всех слов в строке

Регулярное выражение:

\b\w+\b
  • \b — граница слова (начало или конец слова).
  • \w+ — одно или более "словесных" символов (буквы, цифры или символ подчеркивания _).

Пример:

  • Строка: "Hello, world!"
  • Матчи: ["Hello", "world"]

2. Нахождение всех цифр в тексте

Регулярное выражение:

\d+
  • \d+ — одно или более цифр.

Пример:

  • Строка: "There are 123 apples and 45 oranges."
  • Матчи: ["123", "45"]

3. Поиск даты в формате "день/месяц/год"

Регулярное выражение:

\b\d{2}/\d{2}/\d{4}\b
  • \d{2} — два символа, представляющие день или месяц.
  • \d{4} — четыре символа, представляющие год.
  • \b — граница слова.

Пример:

  • Строка: "Мой день рождения 25/12/1995."
  • Матчи: ["25/12/1995"]

4. Поиск времени в формате "часы:минуты"

Регулярное выражение:

\b(?:[01]\d|2[0-3]):[0-5]\d\b
  • [01]\d — часы от 00 до 19.
  • 2[0-3] — часы от 20 до 23.
  • [0-5]\d — минуты от 00 до 59.
  • \b — граница слова.

Пример:

  • Строка: "Встреча в 14:30 или 09:45."
  • Матчи: ["14:30", "09:45"]

5. Поиск 16-значного номера кредитной карты

Регулярное выражение:

\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b
  • \d{4} — четыре цифры.
  • [- ]? — необязательный пробел или тире между группами цифр.
  • \b — граница слова.

Пример:

  • Строка: "Номер карты: 1234-5678-9012-3456 или 1234567890123456."
  • Матчи: ["1234-5678-9012-3456", "1234567890123456"]

6. Поиск URL (веб-ссылок)

Регулярное выражение:

https?:\/\/(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}([\/\w .-]*)*\/?
  • https? — протокол (http или https).
  • :\/\/ — символы "://" после протокола.
  • (www.)? — необязательное "www".
  • [a-zA-Z0-9.-]+ — доменное имя, состоящее из букв, цифр, точек и дефисов.
  • .[a-zA-Z]{2,6} — доменная зона (например, .com, .net, .org).
  • ([\/\w .-]) — необязательный путь (слеши, буквы, цифры, точки и дефисы).

Пример:

7. Поиск пароля с минимальными требованиями (8 символов, хотя бы одна буква и одна цифра)

Регулярное выражение:

(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8,}
  • (?=.*[a-zA-Z]) — позитивная проверка наличия хотя бы одной буквы.
  • (?=.*\d) — позитивная проверка наличия хотя бы одной цифры.
  • [a-zA-Z\d]{8,} — пароль длиной не менее 8 символов, состоящий из букв и цифр.

Пример:

  • Строка: "Pass1234"
  • Матч: ["Pass1234"]

8. Поиск текста в кавычках

Регулярное выражение:

"(.*?)"
  • " — открывающая и закрывающая кавычки.
  • .*? — любой текст (ленивый квантификатор, чтобы захватывать минимально возможное количество символов).

Пример:

  • Строка: Она сказала: "Привет!"
  • Матчи: ["Привет!"]

9. Нахождение повторяющихся слов

Регулярное выражение:

\b(\w+)\b\s+\b\1\b
  • (\w+) — захватываемое слово.
  • \1 — повтор слова (ссылка на первую захваченную группу).
  • \s+ — один или более пробелов между словами.

Пример:

  • Строка: "Это тест тест на повторение."
  • Матчи: ["тест тест"]

10. Поиск шестнадцатеричных цветовых кодов (например, #FF5733)

Регулярное выражение:

#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})
  • # — символ решетки.
  • [a-fA-F0-9]{6} — 6 символов в диапазоне (буквы от A до F (в обоих регистрах) и цифры от 0 до 9).
  • [a-fA-F0-9]{3} — допускается также краткая форма из 3 символов.

Пример:

  • Строка: "Цвета: #FF5733 и #FFF."
  • Матчи: ["#FF5733", "#FFF"]

11. Поиск комментариев в коде (например, C++, Java, JavaScript)

Регулярное выражение для однострочных комментариев (начинающихся с //):

//.*
  • // — символы начала комментария.
  • .* — любой текст до конца строки.

Пример:

  • Строка: int x = 5; // это переменная
  • Матчи: ["// это переменная"]

Регулярное выражение для многострочных комментариев (начинающихся с /* и заканчивающихся на */):

/\*[\s\S]*?\*/
  • /* — начало комментария.
  • [\s\S]*? — любой текст (включая переходы на новую строку).
  • */ — конец комментария.

Пример:

  • Строка: /* Это многострочный комментарий */
  • Матч: ["/* Это многострочный комментарий */"]

12. Поиск MAC-адреса

Регулярное выражение:

\b([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}\b
  • [0-9A-Fa-f]{2} — два шестнадцатеричных символа.
  • [:-] — двоеточие или тире между группами.
  • {5} — повторение группы 5 раз.
  • \b — граница слова.

Пример:

  • Строка: "MAC: 00:1A:2B:3C:4D:5E или 00-1A-2B-3C-4D-5E"
  • Матчи: ["00:1A:2B:3C:4D:5E", "00-1A-2B-3C-4D-5E"]

Еще немного примеров:

13. Поиск email-адресов:

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

Это выражение найдет строки, которые могут быть email-адресами, состоящими из букв, цифр и некоторых специальных символов.

14. Поиск IP-адресов:

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

Это выражение найдет IP-адреса в формате "xxx.xxx.xxx.xxx", где каждая часть состоит из 1-3 цифр.

15. Поиск номера телефона:

\+?\d{1,3}[-.\s]?\(?\d{1,4}\)?[-.\s]?\d{1,4}[-.\s]?\d{1,9}

Это регулярное выражение найдет телефонные номера с международным кодом и различными форматами (с пробелами, точками, скобками и тире).

16. Поиск HTML-тегов:

<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)

Это выражение найдет все HTML-теги в тексте.

Практическое применение

  • Поиск и замена в текстах:

С помощью регулярных выражений можно легко находить и заменять части текста. Например, в текстовом редакторе можно заменить все номера телефонов в определённом формате.

  • Валидация ввода:

Регулярные выражения часто используются для проверки корректности ввода, например, email-адресов, номеров телефонов или паролей.

  • Парсинг текста:

С их помощью можно извлекать информацию из текста, например, вытаскивать цифры, даты или другие конструкции.

Популярные библиотеки для работы с регулярными выражениями

  • Python: Модуль re
  • JavaScript: Класс RegExp и методы строк
-2
  • Java: Класс Pattern и Matcher
-3
  • PHP: Функции preg_match, preg_replace и другие
-4

Заключение

Регулярные выражения — это хороший инструмент, который позволяет эффективно работать с текстом, находить и изменять нужные элементы.

Однако, несмотря на их гибкость и мощь, они могут быть сложными для понимания и использования, особенно для новичков. Тем не менее, освоив основы, регулярные выражения могут значительно облегчить работу с текстом и данными.

-5

Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Подписывайтесь в на мой канал в Телеграмм.

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.

Обязательно прочитайте: Что должен знать и уметь тестировщик

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам