Skip to content

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

Регулярные выражения (regex) — это мощный инструмент для поиска и манипуляции текстом. В Java регулярные выражения используются через классы Pattern и Matcher. Давайте подробнее рассмотрим правила написания регулярных выражений на примере проверки адреса электронной почты.

Основные правила и конструкции регулярных выражений

  1. Символы и метасимволы:
  2. . — соответствует любому символу, кроме символа новой строки.
  3. ^ — указывает на начало строки.
  4. $ — указывает на конец строки.
  5. * — соответствует нулю или более вхождениям предыдущего символа.
  6. + — соответствует одному или более вхождениям предыдущего символа.
  7. ? — соответствует нулю или одному вхождению предыдущего символа.
  8. {n} — соответствует ровно n вхождениям предыдущего символа.
  9. {n,} — соответствует n или более вхождениям.
  10. {n,m} — соответствует от n до m вхождениям.

  11. Классы символов:

  12. [abc] — соответствует любому из символов a, b или c.
  13. [^abc] — соответствует любому символу, кроме a, b или c.
  14. [a-z] — соответствует любому символу в диапазоне от a до z.
  15. [0-9] — соответствует любой цифре.

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

  17. \d — соответствует любой цифре (эквивалентно [0-9]).
  18. \D — соответствует любому нецифровому символу.
  19. \w — соответствует любому алфавитно-цифровому символу (буквы, цифры и символ подчеркивания).
  20. \W — соответствует любому неалфавитно-цифровому символу.
  21. \s — соответствует любому пробельному символу (пробел, табуляция, новая строка).
  22. \S — соответствует любому непробельному символу.

  23. Группировка и альтернативы:

  24. (abc) — группирует символы, чтобы применить к ним квантификаторы.
  25. a|b — соответствует либо a, либо b.

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

Теперь давайте разберем регулярное выражение, которое мы использовали в примере:

String emailRegex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
  1. ^ — начало строки. Указывает, что проверка должна начинаться с начала строки.

  2. [a-zA-Z0-9._%+-]+ — соответствует одной или более буквам (верхнего и нижнего регистра), цифрам, а также символам ., _, %, +, -. Это первая часть адреса электронной почты (до символа @).

  3. @ — символ @, который разделяет имя пользователя и домен.

  4. [a-zA-Z0-9.-]+ — соответствует одной или более буквам, цифрам, а также символам . и -. Это часть домена (например, example в example.com).

  5. \\. — соответствует символу .. Обратите внимание, что в Java необходимо экранировать обратный слэш, поэтому мы используем \\. вместо ..

  6. [a-zA-Z]{2,} — соответствует двум или более буквам (верхнего или нижнего регистра). Это часть, которая соответствует доменной зоне (например, com, org и т.д.).

  7. $ — конец строки. Указывает, что проверка должна заканчиваться в конце строки.

Заключение

Регулярные выражения могут быть сложными, но они очень мощные для работы с текстом. Понимание основных правил и конструкций поможет вам создавать эффективные регулярные выражения для различных задач. Важно также тестировать регулярные выражения, чтобы убедиться, что они работают так, как вы ожидаете. Существуют онлайн-инструменты, которые могут помочь вам в этом, позволяя визуализировать и тестировать регулярные выражения.

В Java для работы с регулярными выражениями используется класс Pattern и Matcher из пакета java.util.regex. Вот пример, который демонстрирует, как написать регулярное выражение и использовать его для проверки строки на соответствие.

Допустим, мы хотим проверить, является ли строка корректным адресом электронной почты. Регулярное выражение для этого может выглядеть так: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$.

Вот пример кода:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class EmailValidator {
    public static void main(String[] args) {
        String email = "example@example.com";

        // Регулярное выражение для проверки адреса электронной почты
        String emailRegex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";


String rimDigRegex = "^M{0,3}(D?C{0,3}|C[DM])?(L?X{0,3}|X[LC])?(V?I{0,3}|I[VX])?[А-Я]{2}[0-9]{6}$";


        // Создаем объект Pattern
        Pattern pattern = Pattern.compile(emailRegex);

        // Создаем объект Matcher
        Matcher matcher = pattern.matcher(email);

        // Проверяем соответствие
        if (matcher.matches()) {
            System.out.println("Адрес электронной почты корректен.");
        } else {
            System.out.println("Адрес электронной почты некорректен.");
        }
    }
}

В этом примере:

  1. Мы определяем строку email, которую хотим проверить.
  2. Создаем регулярное выражение emailRegex для проверки формата адреса электронной почты.
  3. Используем Pattern.compile() для создания объекта Pattern.
  4. Создаем объект Matcher с помощью метода matcher() объекта Pattern.
  5. Вызываем метод matches() у объекта Matcher, чтобы проверить, соответствует ли строка регулярному выражению.

Если строка соответствует регулярному выражению, программа выведет "Адрес электронной почты корректен.", в противном случае — "Адрес электронной почты некорректен."