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