Регулярное выражение определяет шаблон поиска для строк. Этот шаблон может совпадать один или несколько раз или не совпадать вообще для заданной строки. Сокращение для регулярного выражения — regex. Регулярные выражения можно использовать для поиска, редактирования и обработки текста.
Метасимволы регулярных выражений — это специальные символы, которые несут определенное значение и определяют шаблон в регулярном выражении. Эти символы позволяют нам создавать гибкие и мощные шаблоны поиска для обработки текста.
1. Список метасимволов регулярных выражений
Вот список распространенных метасимволов регулярных выражений и их значений:
| Мета-персонаж | Описание |
|---|---|
| . | Соответствует любому одиночному символу, кроме символа новой строки. |
| ^ | Соответствует началу строки. |
| $ | Соответствует концу строки. |
| * | Соответствует нулю или более повторений предыдущего элемента. |
| + | Соответствует одному или нескольким повторениям предыдущего элемента. |
| ? | Соответствует нулю или одному повторению предыдущего элемента(делает его необязательным). |
| {н} | Соответствует ровно n повторениям предыдущего элемента. |
| {н,} | Соответствует n или более повторениям предыдущего элемента. |
| {н,м} | Соответствует от n до m повторений предыдущего элемента. |
| \ | Экранирует метасимвол, позволяя рассматривать его как буквальный символ. |
| [] | Соответствует любому отдельному символу в скобках. |
| [^] | Соответствует любому одиночному символу, не заключенному в скобки. |
| () | Группирует несколько токенов вместе и сохраняет совпадающий текст. |
| \д | Соответствует любой цифре, эквивалентной [0-9]. |
| \Д | Соответствует любому символу, не являющемуся цифрой, эквивалентно [^0-9]. |
| \w | Соответствует любому символу слова(буквы, цифры + подчеркивание), эквивалентно [a-zA-Z0-9_]. |
| \W | Соответствует любому символу, не являющемуся словом, эквивалентно [^a-zA-Z0-9_]. |
| \с | Соответствует любому символу пробела(пробелу, табуляции, переносу строки). |
| \С | Соответствует любому символу, отличному от пробела. |
2. Пример метасимволов регулярных выражений
Давайте рассмотрим несколько примеров использования метасимволов в регулярных выражениях и их сопоставления.
2.1. Метасимвол точки(.)
Метасимвол точки соответствует любому одиночному символу, кроме символа новой строки(\n). Он полезен для сопоставления шаблона, где символ может быть любым.
Pattern pattern = Pattern.compile(".at");Matcher matcher = pattern.matcher("cat bat rat sat mat");while(matcher.find()) {System.out.println(matcher.group()); // cat, bat, rat, sat, mat}2.2 Метасимволы «крышка»(^) и «доллар»($)
Знак каретки(^) соответствует началу строки, а знак доллара($) соответствует концу строки. Они используются для того, чтобы гарантировать, что шаблон соответствует началу или концу строки соответственно.
// Matches "Hello" only if it is at the start of the stringPattern pattern = Pattern.compile("^Hello");Matcher matcher = pattern.matcher("Hello world");System.out.println(matcher.find()); // true// Matches "world" only if it is at the end of the stringpattern = Pattern.compile("world$");matcher = pattern.matcher("Hello world");System.out.println(matcher.find()); // true2.3. Метасимволы звездочки(*), плюса(+) и вопросительного знака(?)
- *: Соответствует нулю или более повторений предыдущего элемента.
- +: Соответствует одному или нескольким повторениям предыдущего элемента.
- ?: Соответствует нулю или одному повторению предыдущего элемента(делает его необязательным).
// Matches "a", "aa", "aaa", etc.Pattern pattern = Pattern.compile("a*");Matcher matcher = pattern.matcher("aaab");while(matcher.find()) {System.out.println(matcher.group()); // aaa}// Matches "a", "aa", "aaa", etc., but at least one "a"pattern = Pattern.compile("a+");matcher = pattern.matcher("aaab");while(matcher.find()) {System.out.println(matcher.group()); // aaa}// Matches "a" or "ab"pattern = Pattern.compile("ab?");matcher = pattern.matcher("ab");while(matcher.find()) {System.out.println(matcher.group()); // ab}2.4. Фигурные скобки({}) Метасимволы
Фигурные скобки используются для указания точного количества повторений предыдущего элемента.
- {n}: Ровно n повторений.
- {n,}: Не менее n повторений.
- {n,m}: От n до m повторений.
// Matches exactly 3 "a"sPattern pattern = Pattern.compile("a{3}");Matcher matcher = pattern.matcher("aaab");while(matcher.find()) {System.out.println(matcher.group()); // aaa}// Matches 2 or more "a"spattern = Pattern.compile("a{2,}");matcher = pattern.matcher("aaaa");while(matcher.find()) {System.out.println(matcher.group()); // aaaa}// Matches between 2 and 3 "a"spattern = Pattern.compile("a{2,3}");matcher = pattern.matcher("aaa");while(matcher.find()) {System.out.println(matcher.group()); // aaa}2.5. Квадратные скобки([]) Метасимволы
Квадратные скобки используются для определения класса символов, соответствующего любому отдельному символу в скобках.
- [abc]: Соответствует любому отдельному символу «a», «b» или «c».
- [^abc]: Соответствует любому отдельному символу, кроме «a», «b» или «c».
// Matches "a", "b", or "c"Pattern pattern = Pattern.compile("[abc]");Matcher matcher = pattern.matcher("a1b2c3");while(matcher.find()) {System.out.println(matcher.group()); // Matches 'a', 'b', 'c'}// Matches any character except "a", "b", or "c"pattern = Pattern.compile("[^abc]");matcher = pattern.matcher("a1b2c3");while(matcher.find()) {System.out.println(matcher.group()); // Matches '1', '2', '3'}3. Экранирование метасимволов с помощью обратной косой черты(\)
Обратная косая черта используется для экранирования метасимвола, делая его буквальным символом в шаблоне. Например, \\. соответствует буквенному символу точки('.').
// Matches the literal dot characterPattern pattern = Pattern.compile("\\.");Matcher matcher = pattern.matcher("1.2.3");while(matcher.find()) {System.out.println(matcher.group());}В этом примере регулярного выражения Java мы научились использовать метасимволы в регулярных выражениях для оценки текстовых строк.