
Что такое регулярные выражения.
Регулярные выражения — это способ описать набор строк с общими характеристиками, которые есть у каждой строки в наборе. Регулярные выражения могут использоваться для поиска и управления данными. Вы должны изучить специальный синтаксис, чтобы создавать регулярные выражения, который выходит за рамки обычного синтаксиса языка Java. Регулярные выражения могут быть разной сложности, но как только вы поймете основы, вы сможете создавать любые регулярные выражения. В данных уроках мы рассмотрим синтаксис регулярных выражений, а также примеры программ, работающих с java.util.regex API, чтобы понять как все это работает.Как регулярные выражения представлены в Java?
Пакет java.util.regex содержит три основных классаPattern
, Matcher
, и PatternSyntaxException
.
Объект
Pattern
— это скомпилированное регулярное выражение.Pattern
не предоставляет публичных конструкторов. Чтобы создатьpattern
необходимо вызватьpublic static compile
метод, который вернет объектPattern
. Первый аргумент этой функции — регулярное выражение.Объект
Matcher
— это «движок», который интерпретирует регулярное выражение и сопоставляет его с входной строкой. Как и классPattern
,Matcher
не имеет публичных конструкторов. Получить объектMatcher
можно вызвав методmatcher
объектаPattern
.PatternSyntaxException
— исключение, означающее синтаксическую ошибку в выражении.В последствии мы рассмотрим подробно каждый из этих классов. Но сначала необходимо понимать, как устроены регулярные выражения. Рассмотрим тестовую программу для понимания синтаксиса регулярных выражений.

RegexTestHarness.java
для изучения регулярных выражений. Команда для запуска программы: java RegexTestHarness
, можно без аргументов. Цикл программы повторяется, позволяя пользователя вводить регулярное выражение и строку для поиска. Вы можете не использовать данную программу, однако, она может быть полезна для тестирования примеров, которые мы будем рассматривать.
Строковые литералы
Основной задачей шаблонов является сравнение строк. Например, если регулярное выражениеfoo
и входная строка foo
, то программа найдет совпадение, потому что строки одинаковые. Попробуйте этот пример в нашей тестовой программе.
Enter your regex: foo
Enter input string to search: foo
I found the text foo starting at index 0 and ending at index 3.
Обратите внимание на то, что длина входной строки равна 3, начальный индекс 0, конечный 3:


Метасимволы
Данное API также поддерживает некоторый специальные символы, которые определяют «поведение» регулярного выражения. Попробуем изменить входную строку наcats
, а регулярное выражение на cat.
. Вывод:
Enter your regex: cat.
Enter input string to search: cats
I found the text cats starting at index 0 and ending at index 4.
Сравнение по-прежнему успешно, даже несмотря на точку во входной строке. Так произошло, потому что точка — метасимвол — специальный символ, который имеет какое-то значение для matcher
’а. Метасимвол точка имеет смысл «любой символ», поэтому сравнение оказалось успешным в этом примере.
Метасимволы, поддерживаемые API: <([{\^-=$!|]})?*+.>
Существует два способа пометить метасимволы, чтобы они воспринимались как обычные:
- экранировать метасимвол обратным слэшем
- заключить в
\Q
(начало) и\E
(конец).
\Q
и \E
в любое место выражения, \Q
необходимо располагать перед \E
.
На этом все, в следующих уроках мы продолжим изучение регулярных выражений в Java.
Ссылка на первоисточник: Регулярные выражения в Java. Часть 1
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Попробуй создай новый проект, повтори код, открой консоль(cmd.exe в Windows OS), пройди в консоле до файла (команда cd — перейти в ., dir — Команда для просмотра, что есть в директории), прокомпилируйте его — javac <Файл>.java
При успешной компиляции создастся файла <файл>.class (Значит все без ошибок прошло). После исполни его командой java <файл> (без .class и .java, просто <Файл>) и программа заработает как надо.
Но это все при условии, что у вас Windows OS и установлен корректно Java jdk