Регулярні вирази у Java


  • Регулярні вирази у Java реалізовуються за допомогою класів Pattern та Matcher. Спочатку статичний метод Pattern.compile(String regExp) використовують для побудови регулярного виразу, далі використовують метод matcher(String source) об’єкта-петерна для отримання матчера і нарешті використовують метод find() матчера для пошуку.

  • У якості регулярного виразу може використовуватися як звичайний текстовий рядок, так і рядок, що містить певні метасимволи.
  • Перелік метасимволів наступний:

. – будь-який символ

\d – цифра

\s – символи відступу (whitespace), зокрема пробіл

\w – цифри, літери, символ підкреслення (underscore)

  • Метасимволи у Java потребують екранування, оскільки починаються зі зворотнього слешу. Наприклад для задання метасимволу \d необхідно зробити наступним чином:

String digitExpr = “\\d”;

  • Метасимвол «крапка» потребує подвійного екранування:

String dotExpr = “\\.”;

  • Також можна вказувати діапазони значень у квадратних дужках: [a-k] – шукатиме літери від a до k у нижньому регістрі, [a-kA-K] – у обох регістрах.
  • Якщо потрібно знайти ціле слово, то теж використовуються дужки, але круглі. Наприклад (LEFT|RIGHT) шукатиме слово LEFT або слово RIGHT
  • Велика літера у метасимволах означає обернене значення, тобто:

\D – будь-який символ окрім цифр

\S – будь-який символ окрім символів відступу

\W – будь-що крім цифр, літер та символа підкреслення

  • Регулярні вирази дозволяють здійснювати пошук заданої кількості символів, що відповідають певному критерію.
  • Метасимволи (кваліфікатори) для позначення кількості наступні:

* – жодного або більше

? – жодного або один

+ – один або більше

{n} – рівно n

{n,} – як мінімум n

{n,m} – як мінімум n, але не більше за m

  • Метасимвол ^ використовується для інвертування регулярного виразу. Наприклад вираз ^a шукатиме все, крім символу a.
  • Кваліфікатори *, ? та + є «жадібними», тобто намагаються повернути якомога більший шматок рядка, у якому ми здійснюємо пошук. Наприклад для рядка abcbbc регулярний вираз .*bc повертає всі підрядки, що закінчуються на bc. За рахунок «жадібності» цей регулярний вираз здійснюватиме пошук справа наліво і поверне abcbbc. Не «жадібна» версія регулярного виразу .*?bc здійснює пошук справа наліво і поверне два результати: abc та bbc
  • Не «жадібні» варіанти квантифікаторів *, ? та + виглядають як *?, ?? та +? відповідно
  • Корисні посилання:
  1. «Шпаргалка» про регулярні вирази на Java: http://www.rgare.com/productsandservices/eunderwriting/Robohelp/Java_Regular_Expressions_Quick__Reference.pdf
  2. Онлайн-сервіс для аналізу регулярних виразів http://www.regexr.com/

Почитайте ще оце:

Залиште коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *