Java for Beginner
676 subscribers
543 photos
155 videos
12 files
833 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Регулярные выражения в Java

Регулярные выражения (или регэкспы) — это мощный инструмент для поиска и обработки текста на основе шаблонов. В Java они представляют собой гибкий способ для проверки строк, поиска подстрок, замены и других текстовых операций. Регулярные выражения используются в самых разных ситуациях: от простой валидации данных до сложной обработки текста.

Регулярное выражение — это строка, которая описывает шаблон для поиска в тексте. С помощью такого шаблона можно легко проверять, соответствует ли строка определённому формату, искать совпадения и даже заменять текст.


В Java для работы с регулярными выражениями используется пакет java.util.regex, который включает два основных класса:

Pattern — компилирует регулярное выражение в объект шаблона.
Matcher — используется для поиска и обработки текста на основе скомпилированного шаблона.


Как работают регулярные выражения в Java?

Компиляция регулярного выражения: Шаблон регулярного выражения компилируется в объект типа Pattern. Это важно для повышения производительности, так как скомпилированное выражение можно использовать повторно.
Создание объекта Matcher: Объект Matcher создается на основе строки, которую необходимо обработать, и объекта Pattern.
Поиск и проверка совпадений: С помощью метода find() или matches() проверяется, соответствует ли строка регулярному выражению.

import java.util.regex.*;

public class RegexExample {
public static void main(String[] args) {
// Шаблон регулярного выражения
String regex = "\\d+"; // Ищет одну или более цифр

// Строка для поиска
String input = "В Java 17 появилась новая функциональность.";

// Компиляция шаблона
Pattern pattern = Pattern.compile(regex);

// Создание объекта Matcher
Matcher matcher = pattern.matcher(input);

// Поиск совпадений
while (matcher.find()) {
System.out.println("Найдено совпадение: " + matcher.group());
}
}
}
В этом примере регулярное выражение \\d+ ищет одну или более цифр в строке.


Основные элементы регулярных выражений

Регулярные выражения включают разнообразные элементы, такие как символы, классы символов, метасимволы, квантификаторы и группы.


Символы и их экранирование

Обычные символы в регулярных выражениях соответствуют самим себе. Например, выражение a найдет символ a в строке. Однако существуют специальные символы, которые необходимо экранировать обратной косой чертой \, чтобы использовать их как обычные символы.

. — соответствует любому символу, кроме новой строки.
\. — экранированная точка, соответствует точке ..


Классы символов

Классы символов позволяют описать множество символов, которые могут быть в определённой позиции строки.

[abc] — соответствует одному из символов a, b или c.
[^abc] — соответствует любому символу, кроме a, b или c.
[0-9] — соответствует любой цифре от 0 до 9.
Предопределенные классы символов
\d — соответствует любой цифре, эквивалентно [0-9].
\D — соответствует любому символу, который не является цифрой, эквивалентно [^0-9].
\w — соответствует букве, цифре или символу подчеркивания, эквивалентно [a-zA-Z0-9_].
\W — соответствует любому символу, который не является буквой, цифрой или подчеркиванием.
\s — соответствует пробельному символу (пробел, табуляция, перенос строки).
\S — соответствует любому символу, кроме пробельных.

public class PredefinedClassesExample {
public static void main(String[] args) {
String regex = "\\w+"; // Соответствует одному или более "словам"
String input = "Java_17 is awesome!";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
System.out.println("Найдено слово: " + matcher.group());
}
}
}


#Java #Training #Medium #Regular_ExpressionsAPI
Метасимволы

Метасимволы — это символы, которые имеют специальное значение в регулярных выражениях.


. — любой символ, кроме новой строки.
^ — соответствует началу строки.
$ — соответствует концу строки.
| — логическое "или".
() — группы для объединения подвыражений.


public class GroupExample {
public static void main(String[] args) {
String regex = "(Java|Python)"; // Найдет либо "Java", либо "Python"
String input = "Я учу Java и Python.";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
System.out.println("Найдено: " + matcher.group());
}
}
}


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

Квантификаторы задают, сколько раз символ или группа могут повторяться.

* — ноль или более повторений.
+ — одно или более повторений.
? — ноль или одно повторение.
{n} — ровно n повторений.
{n,} — не менее n повторений.
{n,m} — от n до m повторений.

public class QuantifierExample {
public static void main(String[] args) {
String regex = "\\d{2,4}"; // Ищет числа с 2 до 4 цифр
String input = "Числа: 12, 345, 6789 и 12345.";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
System.out.println("Найдено число: " + matcher.group());
}
}
}


Виды регулярных выражений

Регулярные выражения могут быть простыми и сложными в зависимости от задачи. Они делятся на несколько основных категорий:
Простые регулярные выражения: Подходят для простых операций поиска, например, нахождения цифр или букв.
Сложные регулярные выражения: Используются для более сложных задач, таких как валидация форматов (например, номера телефона или электронной почты).
Глобальные и локальные регулярные выражения: В Java можно искать все совпадения в строке или только одно с помощью методов find() или matches().


#Java #Training #Medium #Regular_ExpressionsAPI
Регулярные выражения в Java

Регулярные выражения активно используются для:
Валидации данных: Проверка форматов данных (email, телефон, IP-адрес и т.д.).
Парсинга текста: Извлечение определённых частей текста.
Поиска и замены: Замена подстрок в строке.
Разбиения текста на части: Разбиение строк по разделителям.


Валидация данных

Одним из самых распространённых применений регулярных выражений является проверка, соответствует ли строка заданному формату. Например, вы можете проверить, является ли строка допустимым email или телефонным номером.

Пример валидации email:
public class EmailValidation {
public static void main(String[] args) {
String emailPattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
String email = "example@test.com";

boolean isValid = email.matches(emailPattern);
System.out.println("Email " + email + " валиден: " + isValid);
}
}
В этом примере регулярное выражение проверяет, соответствует ли email правильному формату.


Пример валидации номера телефона:
public class PhoneValidation {
public static void main(String[] args) {
String phonePattern = "^\\+?[0-9]{10,13}$";
String phoneNumber = "+1234567890";

boolean isValid = phoneNumber.matches(phonePattern);
System.out.println("Номер телефона валиден: " + isValid);
}
}


Парсинг текста

С помощью регулярных выражений можно извлекать определённые части текста.

Пример парсинга даты:
import java.util.regex.*;

public class DateParsing {
public static void main(String[] args) {
String datePattern = "(\\d{2})/(\\d{2})/(\\d{4})";
String input = "Сегодняшняя дата: 15/09/2024.";

Pattern pattern = Pattern.compile(datePattern);
Matcher matcher = pattern.matcher(input);

if (matcher.find()) {
String day = matcher.group(1);
String month = matcher.group(2);
String year = matcher.group(3);
System.out.println("День: " + day + ", Месяц: " + month + ", Год: " + year);
}
}
}
Этот пример демонстрирует, как можно извлечь день, месяц и год из строки с датой.


Поиск и замена

Регулярные выражения также часто используются для поиска и замены частей строки.


Пример замены всех пробелов на подчеркивания:
public class ReplaceSpaces {
public static void main(String[] args) {
String input = "Java is awesome!";
String result = input.replaceAll("\\s", "_");

System.out.println(result); // Вывод: Java_is_awesome!
}
}


Разбиение текста

Регулярные выражения позволяют разбивать строки по определённым разделителям.

Пример разбиения строки по запятым:
public class SplitExample {
public static void main(String[] args) {
String input = "apple,orange,banana";
String[] fruits = input.split(",");

for (String fruit : fruits) {
System.out.println(fruit);
}
}
}


#Java #Training #Medium #Regular_ExpressionsAPI