Java Регулярні вирази
Що таке регулярний вираз?
Регулярний вираз — це послідовність символів, яка формує шаблон пошуку. Коли ви шукаєте дані в тексті, ви можете використовувати цей шаблон пошуку, щоб описати те, що ви шукаєте.
Регулярний вираз може бути одним символом або більш складним шаблоном.
Регулярні вирази можна використовувати для виконання всіх типів операцій текстового пошуку та заміни тексту.
Java не має вбудованого класу регулярного виразу, але ми можемо імпортувати пакет java.util.regex
для роботи з регулярними виразами. У пакет входять наступні класи:
Pattern
Class – визначає шаблон (для використання під час пошуку)Matcher
Class– використовується для пошуку шаблонуPatternSyntaxException
Class – вказує на синтаксичну помилку в шаблоні регулярного виразу
Приклад
Дізнайтеся, чи зустрічається слово "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("Відвідайте W3Schools!");
boolean matchFound = matcher.find();
if(matchFound) {
System.out.println("Збіг знайдено");
} else {
System.out.println("Збіг не знайдено");
}
}
}
// Виведе Збіг знайдено
Спробуйте самі »
Пояснення прикладу
У цьому прикладі в реченні шукається слово "w3schools".
По-перше, шаблон створюється за допомогою методу Pattern.compile()
. Перший параметр вказує, який шаблон шукається, а другий параметр має прапорець, який вказує, що пошук має бути нечутливим до регістру. Другий параметр необов’язковий.
Метод matcher()
використовується для пошуку шаблону в рядку. Він повертає об’єкт Matcher, який містить інформацію про виконаний пошук.
Метод find()
повертає true, якщо шаблон знайдено в рядку, і false, якщо він не знайдений.
Прапорці
Прапорці в методі compile()
змінюють спосіб виконання пошуку. Ось декілька з них:
Pattern.CASE_INSENSITIVE
– під час пошуку регістр літер ігноруватиметься.Pattern.LITERAL
– спеціальні символи в шаблоні не матимуть особливого значення та розглядатимуться як звичайні символи під час виконання пошуку.Pattern.UNICODE_CASE
– використовуйте його разом із прапорцемCASE_INSENSITIVE
, щоб також ігнорувати регістр літер за межами англійського алфавіту
Шаблони регулярних виразів
Першим параметром методу Pattern.compile()
є шаблон. Він описує, що шукається.
Дужки використовуються для пошуку діапазону символів:
Вираз | Опис |
---|---|
[abc] | Знайти один символ із варіантів у дужках |
[^abc] | Знайти один символ НЕ в дужках |
[0-9] | Знайти один символ із діапазону від 0 до 9 |
Метасимволи
Метасимволи – це символи зі спеціальним значенням:
Метасимвол | Опис |
---|---|
| | Знайти збіг для будь-якого шаблону, розділеного | а саме: cat|dog|fish |
. | Знайти лише один екземпляр будь-якого символу |
^ | Знайти відповідність на початку рядка, як у: ^Hello |
$ | Знайти відповідність у кінці рядка, як у: World$ |
\d | Знайти цифру |
\s | Знайти пробіл |
\b | Знайти збіг на початку такого слова: \bWORD або в кінці такого слова: WORD\b |
\uxxxx | Знайти символ Unicode, заданий шістнадцятковим числом xxxx |
Квантори
Квантори визначають кількість:
Квантор | Опис |
---|---|
n+ | Відповідає будь-якому рядку, який містить принаймні один n |
n* | Відповідає будь-якому рядку, який містить нуль або більше випадків n |
n? | Відповідає будь-якому рядку, який містить нуль або одне входження n |
n{x} | Відповідає будь-якому рядку, який містить послідовність X n |
n{x,y} | Збігається з будь-яким рядком, який містить послідовність від X до Y n |
n{x,} | Збігається з будь-яким рядком, який містить послідовність принаймні X n |
Що таке квантори?
Квантори - це символи, які використовуються в логіці для позначення кількості елементів, які задовольняють певну умову. Існують два типи кванторів: універсальний квантор (означає "для всіх") та існувальний квантор (означає "існує такий"). У математиці і логіці квантори є важливим інструментом для формалізації розумових процесів та розв’язання проблем, пов’язаних з кількістю елементів у множинах.