регулярные выражения
Регулярные выражения (regex) — это мощный инструмент для поиска и манипуляции текстом. В Java регулярные выражения используются через классы Pattern
и Matcher
. Давайте подробнее рассмотрим правила написания регулярных выражений на примере проверки адреса электронной почты.
Основные правила и конструкции регулярных выражений
- Символы и метасимволы:
.
— соответствует любому символу, кроме символа новой строки.^
— указывает на начало строки.$
— указывает на конец строки.*
— соответствует нулю или более вхождениям предыдущего символа.+
— соответствует одному или более вхождениям предыдущего символа.?
— соответствует нулю или одному вхождению предыдущего символа.{n}
— соответствует ровно n вхождениям предыдущего символа.{n,}
— соответствует n или более вхождениям.-
{n,m}
— соответствует от n до m вхождениям. -
Классы символов:
[abc]
— соответствует любому из символов a, b или c.[^abc]
— соответствует любому символу, кроме a, b или c.[a-z]
— соответствует любому символу в диапазоне от a до z.-
[0-9]
— соответствует любой цифре. -
Специальные символы:
\d
— соответствует любой цифре (эквивалентно[0-9]
).\D
— соответствует любому нецифровому символу.\w
— соответствует любому алфавитно-цифровому символу (буквы, цифры и символ подчеркивания).\W
— соответствует любому неалфавитно-цифровому символу.\s
— соответствует любому пробельному символу (пробел, табуляция, новая строка).-
\S
— соответствует любому непробельному символу. -
Группировка и альтернативы:
(abc)
— группирует символы, чтобы применить к ним квантификаторы.a|b
— соответствует либо a, либо b.
Пример регулярного выражения для проверки адреса электронной почты
Теперь давайте разберем регулярное выражение, которое мы использовали в примере:
String emailRegex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
-
^
— начало строки. Указывает, что проверка должна начинаться с начала строки. -
[a-zA-Z0-9._%+-]+
— соответствует одной или более буквам (верхнего и нижнего регистра), цифрам, а также символам.
,_
,%
,+
,-
. Это первая часть адреса электронной почты (до символа@
). -
@
— символ@
, который разделяет имя пользователя и домен. -
[a-zA-Z0-9.-]+
— соответствует одной или более буквам, цифрам, а также символам.
и-
. Это часть домена (например,example
вexample.com
). -
\\.
— соответствует символу.
. Обратите внимание, что в Java необходимо экранировать обратный слэш, поэтому мы используем\\.
вместо.
. -
[a-zA-Z]{2,}
— соответствует двум или более буквам (верхнего или нижнего регистра). Это часть, которая соответствует доменной зоне (например,com
,org
и т.д.). -
$
— конец строки. Указывает, что проверка должна заканчиваться в конце строки.
Заключение
Регулярные выражения могут быть сложными, но они очень мощные для работы с текстом. Понимание основных правил и конструкций поможет вам создавать эффективные регулярные выражения для различных задач. Важно также тестировать регулярные выражения, чтобы убедиться, что они работают так, как вы ожидаете. Существуют онлайн-инструменты, которые могут помочь вам в этом, позволяя визуализировать и тестировать регулярные выражения.
В 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("Адрес электронной почты некорректен.");
}
}
}
В этом примере:
- Мы определяем строку
email
, которую хотим проверить. - Создаем регулярное выражение
emailRegex
для проверки формата адреса электронной почты. - Используем
Pattern.compile()
для создания объектаPattern
. - Создаем объект
Matcher
с помощью методаmatcher()
объектаPattern
. - Вызываем метод
matches()
у объектаMatcher
, чтобы проверить, соответствует ли строка регулярному выражению.
Если строка соответствует регулярному выражению, программа выведет "Адрес электронной почты корректен.", в противном случае — "Адрес электронной почты некорректен."