JavaRush /Java блог /Random UA /Регулярні вирази у Java. Частина 1
articles
15 рівень

Регулярні вирази у Java. Частина 1

Стаття з групи Random UA
У цій серії уроків ми навчимося використовувати java.util.regex API для регулярних виразів. Також вивчимо синтаксис регулярних виразів. Регулярні вирази у Java.  Частина 1 - 1

Що таке регулярні вирази.

Регулярні вирази - це спосіб описати набір рядків із загальними характеристиками, які є у кожного рядка в наборі. Регулярні вирази можуть використовуватися для пошуку та керування даними. Ви повинні вивчити спеціальний синтаксис, щоб створювати регулярні вирази, який виходить за межі звичайного синтаксису мови 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- Виняток, що означає синтаксичну помилку у виразі.

  • Згодом ми докладно розглянемо кожен із цих класів. Але спочатку необхідно розуміти, як влаштовані регулярні вирази. Розглянемо тестову програму розуміння синтаксису регулярних выражений.

Регулярні вирази у Java.  Частина 1 - 2Створіть програму 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: Регулярні вирази у Java.  Частина 1 - 3Кожен символ рядка розташований у своєму осередку з індексами, що вказують між осередків. Рядок foo починається на індексі 0 і закінчується на 3, незважаючи на те, що займає комірки 0, 1, 2. У наступному прикладі ви помітите деякі особливості: наступний збіг починається там, де закінчується попереднє: Регулярні вирази у Java.  Частина 1 - 4

Метасимволи

Дане 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
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ