Регулярное выражение определяет шаблон поиска для строк. Этот шаблон может совпадать один или несколько раз или не совпадать вообще для заданной строки. Сокращение для регулярного выражения — 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()); // true
2.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 мы научились использовать метасимволы в регулярных выражениях для оценки текстовых строк.