Regex

Regex

Представляет собой объект для работы с регулярными выражениями. Он используется для поиска, проверки и замены строк на основе шаблонов. В Android класс Regex входит в стандартную библиотеку Kotlin и является удобным инструментом для обработки текста.

RegexOption

Флаги позволяют изменять поведение регулярного выражения.

• При создании объекта Regex можно передать один или несколько флагов из RegexOption.

val regex = Regex("[a-z]+", RegexOption.IGNORE_CASE)
val regex = Regex("[a-z]+", setOf(RegexOption.IGNORE_CASE, RegexOption.MULTILINE))
RegexOption.IGNORE_CASE

Игнорирует регистр символов при поиске.

val regex = Regex("hello", RegexOption.IGNORE_CASE)
println(regex.matches("HELLO")) // true
RegexOption.MULTILINE

Включает многолинейный режим, где символы ^ и $ совпадают с началом и концом каждой строки, а не всей строки.

val regex = Regex("^Hello", RegexOption.MULTILINE)
println(regex.containsMatchIn("Hello\nWorld")) // true
RegexOption.LITERAL

Интерпретирует строку регулярного выражения буквально, без обработки специальных символов.

val regex = Regex("Hello.*World", RegexOption.LITERAL)
println(regex.matches("Hello.*World")) // true
RegexOption.UNIX_LINES

Заставляет символы ^ и $ совпадать только с началом и концом строки, а не с началом и концом строки или текста.

val regex = Regex("Hello$", RegexOption.UNIX_LINES)
println(regex.containsMatchIn("Hello\n")) // false
RegexOption.COMMENTS

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

val regex = Regex("""
    \d{3}    # Первые три цифры
    \s       # Пробел
    \d{2}    # Следующие две цифры
""".trimIndent(), RegexOption.COMMENTS)
println(regex.matches("123 45")) // true
RegexOption.DOT_MATCHES_ALL

Позволяет символу . соответствовать любому символу, включая перенос строки (\n).

val regex = Regex("Hello.*World", RegexOption.DOT_MATCHES_ALL)
println(regex.matches("Hello\nWorld")) // true
RegexOption.CANON_EQ

Включает каноническое соответствие, то есть позволяет искать совпадения, учитывая эквивалентность символов.

val regex = Regex("é", RegexOption.CANON_EQ) // "e" + " ́" (два символа)
println(regex.matches("é")) // true
matches

Проверяет, соответствует ли вся строка шаблону.

val regex = Regex("\\d+") // Только цифры
println(regex.matches("12345")) // true
println(regex.matches("123abc")) // false
containsMatchIn

Ищет совпадение внутри строки.

val regex = Regex("[a-zA-Z]+")
println(regex.containsMatchIn("123Hello")) // true
find

Находит первое совпадение в строке и возвращает его.

val regex = Regex("\\d+")
val result = regex.find("Order1234")
println(result?.value) // "1234"
findAll

Ищет все совпадения в строке и возвращает их в виде последовательности (Sequence).

val regex = Regex("\\d+")
val matches = regex.findAll("Item1, Item2, Item3")
matches.forEach { println(it.value) } // "1", "2", "3"
replace

Заменяет все совпадения в строке.

val regex = Regex("\\s+") // Пробелы
val result = regex.replace("Hello   World", "-")
println(result) // "Hello-World"
split

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

val regex = Regex(",\\s*")
val parts = regex.split("apple, banana, cherry")
println(parts) // ["apple", "banana", "cherry"]
Проверка Email
val emailRegex = Regex("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}")
println(emailRegex.matches("example@mail.com")) // true
Проверка номера телефона
val phoneRegex = Regex("^\\+?\\d{10,13}$")
println(phoneRegex.matches("+1234567890")) // true
Проверка IP-адреса
val ipv4Regex = Regex("^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$")
println(ipv4Regex.matches("192.168.0.1")) // true
Проверка даты
val dateRegex = Regex("^\\d{2}/\\d{2}/\\d{4}$")
println(dateRegex.matches("12/05/2023")) // true
Проверка времени
val timeRegex = Regex("^([01]?\\d|2[0-3]):[0-5]\\d$")
println(timeRegex.matches("09:45")) // true
println(timeRegex.matches("23:59")) // true
Проверка URL
val urlRegex = Regex("^(https?://)?(www\\.)?[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}(/.*)?$")
println(urlRegex.matches("https://www.example.com")) // true
println(urlRegex.matches("http://example.com/path")) // true
Проверка номера кредитной карты
val creditCardRegex = Regex("^\\d{4}-?\\d{4}-?\\d{4}-?\\d{4}$")
println(creditCardRegex.matches("1234-5678-9012-3456")) // true
println(creditCardRegex.matches("1234567890123456")) // true
Проверка HEX-цвета
val hexColorRegex = Regex("^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$")
println(hexColorRegex.matches("#FFAABB")) // true
println(hexColorRegex.matches("#abc")) // true
Проверка пароля (минимум 8 символов, буквы и цифры)
val passwordRegex = Regex("^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$")
println(passwordRegex.matches("Password1")) // true
Проверка JSON-объекта
val jsonRegex = Regex("^\\{(?:\"[^\"]*\"\\s*:\\s*\"[^\"]*\",?\\s*)*}$")
println(jsonRegex.matches("{\"key\": \"value\"}")) // true