Регулярні вирази в java і пакет

Регулярні вирази (Regular Expressions) дозволяють зіставляти текст із зазначеним шаблоном, а також виконувати заміну тексту. Ці операції здійснюються за допомогою універсальних символів, які спеціальним чином інтерпретуються. Регулярні вирази підтримуються і використовуються у великій кількості мов програмування.

В Java теж є пакет, який дозволяє працювати з ними - java.util.regex. У цьому туторіали:

Короткий огляд пакета java.util.regex

Пакет складається всього з трьох класів: Matcher, Pattern, PatternSyntaxException.

  • Pattern - скомпільований уявлення регулярного виразу. Для компіляції потрібно викликати статичний метод compile.
  • Matcher - движок, який виробляє операцію порівняння (match).
  • PatternSyntaxException - вказує на синтаксичну помилку в вираженні.

Послідовність виклику методів при роботі з regexp:

Як видно з прикладу, регулярний вираз спершу має бути відкомпілювати. Результуючий об'єкт може бути використаний для створення об'єкта Matcher на основі java.lang.CharSequence (String). Matcher в свою чергу викликає метод matches ().

Регулярні вирази можуть бути дуже корисні при server- і client-side валідації даних.

Послідовність виду [a-zA-Z] вказує на безліч, в нашому випадку це безліч латинських символів у верхньому і нижньому регістрах. говорить про те, що деякий символ повинен зустрінеться n раз, а - від n до m раз. Символ \ d вказує на безліч цифр. "\ U002E" і "\ u005F" - це символи точки і підкреслення відповідно. Знак плюс після деякої послідовності говорить про те, що вона повинна зустрінеться один або більше разів. "|" - уявлення логічного "або".

Повний опис всіх конструкцій можна знайти в Java API.

А ось і результат виконання програми:

Пошук ланцюжків в тексті

Пошук тексту можна здійснити за допомогою методу Matcher.find (). Наприклад, знаходимо відкривають html теги в тексті:

Метод find встановлює курсор на наступний ланцюжок, а отримати саму ланцюжок можна за допомогою методу Matcher.group ().

Найближчим часом розширю статтю декількома більш складними прикладами з групами.

Заміна ланцюжків в тексті

У класу Matcher для заміни тексту є метод replaceAll. Але що якщо нам треба зробити більш гнучку заміну. Для цих цілей знадобляться методи appendReplacement і appendTail. До речі, як раз про виклик методу appendTail програмісти іноді забувають. Пошук ланцюжків як і раніше здійснюємо методом Matcher.find ().

В API для забезпечення сумісності досі використовується StringBuffer.

Поки що все. Якщо є питання і зауваження - пишіть.

Схожі статті