Java RegEx

Оновлено: 22.05.2023

Що таке регулярний вираз?

Регулярний вираз - це послідовність символів, яка формує шаблон пошуку. Коли ви шукаєте дані в тексті, ви можете використовувати цей шаблон пошуку для опису того, що ви шукаєте.

Регулярний вираз може бути як одним символом, так і більш складним шаблоном.

Регулярні вирази можна використовувати для виконання всіх типів пошуку та заміни тексту.

Java не має вбудованого класу регулярних виразів, але ми можемо імпортувати пакет java.util.regex для роботи з регулярними виразами. До складу пакету входять наступні класи:

Клас шаблону - визначає шаблон (для використання в пошуку) Клас Matcher - Використовується для пошуку шаблону Клас PatternSyntaxException - вказує на синтаксичну помилку в шаблоні регулярного виразу

Дізнайтеся, чи є в реченні входження слова "w3schools":

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
  public static void main(String[] args) {
    Pattern pattern = Pattern.compile("w3schools", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher("Visit W3Schools!");
    boolean matchFound = matcher.find();
    if(matchFound) {
      System.out.println("Match found");
    } else {
      System.out.println("Match not found");
    }
  }
}
// Outputs Match found

У цьому прикладі в реченні шукається слово "w3schools".

Спочатку створюється шаблон за допомогою методу Pattern.compile(). Перший параметр вказує, який шаблон шукати, а другий параметр має прапорець, який вказує на те, що пошук має бути нечутливим до регістру. Другий параметр не є обов'язковим.

Метод matcher() використовується для пошуку шаблону в рядку. Він повертає об'єкт Matcher, який містить інформацію про виконаний пошук.

Метод find() повертає true, якщо шаблон знайдено в рядку, і false, якщо його не знайдено.

Прапори

Прапори в методі compile() змінюють спосіб виконання пошуку. Ось декілька з них:

Pattern.CASE_INSENSITIVE - При пошуку буде ігноруватися регістр літер. Pattern.LITERAL - Спеціальні символи в шаблоні не матимуть ніякого особливого значення і будуть розглядатися як звичайні символи при виконанні пошуку. Pattern.UNICODE_CASE - Використовуйте його разом з прапором CASE_INSENSITIVE, щоб також ігнорувати регістр літер поза англійським алфавітом

Шаблони регулярних виразів

Першим параметром методу Pattern.compile() є шаблон. Він описує те, що шукається.

Дужки використовуються для пошуку діапазону символів:

Expression Description [abc] Find one character from the options between the brackets [^abc] Find one character NOT between the brackets [0-9] Find one character from the range 0 to 9

Метасимволи

Метасимволи - це символи з особливим значенням:

Metacharacter Description | Find a match for any one of the patterns separated by | as in: cat|dog|fish . Find just one instance of any character ^ Finds a match as the beginning of a string as in: ^Hello $ Finds a match at the end of the string as in: World$ \d Find a digit \s Find a whitespace character \b Find a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b \uxxxx Find the Unicode character specified by the hexadecimal number xxxx

Квантифікатори

Квантифікатори визначають кількість:

Quantifier Description n+ Matches any string that contains at least one n n* Matches any string that contains zero or more occurrences of n n? Matches any string that contains zero or one occurrences of n n{x} Matches any string that contains a sequence of X n's n{x,y} Matches any string that contains a sequence of X to Y n's n{x,} Matches any string that contains a sequence of at least X n's