Regex относится к регулярному выражению, которое используется для поиска строки или замены в объекте регулярного выражения. Чтобы использовать эту функциональность, нам нужно использовать класс Regex(шаблон: строка). Класс KotlinRegex находится в пакете kotlin.text.regex.
Рассмотрим введение в регулярные выражения Kotlin и их шаблоны.
- Конструктор регулярных выражений Kotlin
- Regex функции
- Проверка класса Regex, содержащего входной шаблон
- Пример регулярного выражения containsMatchIn()
- Пример регулярного выражения Matches(input: CharSequence): Boolean
- Пример matchEntire(input: CharSequence): MatchResult?
- Регулярное выражение offfind(input: CharSequence, startIndex: Int = 0): MatchResult?
- offfindAll(input: CharSequence, startIndex: Int = 0): Sequence<MatchResult>
- ofreplace(input: CharSequence, replacement: String): String
- Регулярное выражение ofreplaceFirst(input: CharSequence, replacement: String): String
- ofsplit(input: CharSequence, limit: Int = 0): List<String>
- Regex шаблоны
- Мета-символы регулярного выражения
- Шаблоны квантификаторов
- Шаблоны регулярных выражений
Конструктор регулярных выражений Kotlin
| Regex(pattern: String) | Создает регулярное выражение из заданного строкового шаблона. |
| Regex(pattern: String, option: RegexOption) | Он создает регулярное выражение из заданного шаблона строки и данного единственного параметра. |
| Regex(pattern: String, options: Set<RegexOption>) | Создается регулярное выражение из заданного шаблона строки и набора заданных параметров. |
Regex функции
| Функции | Описания |
|---|---|
| fun containsMatchIn(input: CharSequence): Boolean | Указывает, что регулярное выражение содержит хотя бы один входной символ. |
| fun find( input: CharSequence, startIndex: Int = 0 ): MatchResult? |
Возвращает первое совпадение регулярного выражения во входной последовательности символов, начиная с заданного startIndex. |
| fun findAll( input: CharSequence, startIndex: Int = 0 ): Sequence<MatchResult> |
Возвращает все вхождения регулярного выражения во входную строку, начиная с заданного startIndex. |
| funmatchEntire(input: CharSequence): MatchResult? | Используется для сопоставления полного входного символа из шаблона. |
| infix fun matches(input: CharSequence): Boolean | Указывает, соответствует ли в регулярном выражении вся введенная последовательность символов. |
| fun replace(input: CharSequence, replacement: String): String | Заменяет всю входную последовательность символов регулярного выражения заданной строкой замены. |
| fun replaceFirst( input: CharSequence, replacement: String ): String |
Заменит первое вхождение регулярного выражения в данной входной строке заданной строкой замены. |
| fun split(input: CharSequence, limit: Int = 0): List<String> | Разбивает входную последовательность символов регулярного выражения. |
| fun toPattern(): Pattern fun toString(): String |
Возвращает регулярное выражение в виде строки. |
Проверка класса Regex, содержащего входной шаблон
fun main(args: Array){
val regex = Regex(pattern = "ko")
val matched = regex.containsMatchIn(input = "kotlin")
println(matched)
}
Выход:
true
Результат функции Regex основан на сопоставлении шаблона регулярного выражения и входной строки. Некоторые функции проверяют частичное совпадение, а некоторые — полное.
Пример регулярного выражения containsMatchIn()
fun main(args: Array){
val regex = """a([bc]+)d?""".toRegex()
val matched = regex.containsMatchIn(input = "xabcdy")
println(matched)
}
Выход:
true
Пример регулярного выражения Matches(input: CharSequence): Boolean
Matches(input: CharSequence): логическая функция регулярного выражения проверяет совпадения всех входных последовательностей символов в регулярном выражении.
fun main(args: Array){
val regex = """a([bc]+)d?""".toRegex()
val matched1 = regex.matches(input = "xabcdy")
val matched2 = regex.matches(input = "xabcdyabcd")
val matched3 = regex.matches(input = "abcd")
println(matched1)
println(matched2)
println(matched3)
}
Выход:
false false true
Пример matchEntire(input: CharSequence): MatchResult?
Функция matchEntire() используется для сопоставления полного входного символа из шаблона.
fun main(args: Array){
val regex = Regex("abcd")
val matchResult1 = regex.matchEntire("abcd")?.value
val matchResult2 = regex.matchEntire("abcda")?.value
val matchResult3 = Regex("""\d+""").matchEntire("100")?.value
val matchResult4 = Regex("""\d+""").matchEntire("100 dollars")?.value
println(matchResult1)
println(matchResult2)
println(matchResult3)
println(matchResult4)
}
Выход:
abcd null 100 null
Регулярное выражение offfind(input: CharSequence, startIndex: Int = 0): MatchResult?
Функция find используется для поиска последовательности входных символов из объекта регулярного выражения.
fun main(args: Array){
val emailParttern = Regex("""\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6}""")
val email :String? = emailParttern.find("this is my email mymail@google.com")?.value
println(email)
val phoneNumber :String? = Regex(pattern = """\d{3}-\d{3}-\d{4}""")
.find("phone: 123-456-7890, e..")?.value
println(phoneNumber)
}
Выход:
[email protected] 123-456-7890
offfindAll(input: CharSequence, startIndex: Int = 0): Sequence<MatchResult>
Функция регулярного выражения findAll() возвращает последовательность результатов совпадения на основе предоставленного шаблона.
fun main(args: Array){
val foundResults = Regex("""\d+""").findAll("ab12cd34ef 56gh7 8i")
val result = StringBuilder()
for(findText in foundResults) {
result.append(findText.value + " ")
}
println(result)
}
Выход:
12 34 56 7 8
ofreplace(input: CharSequence, replacement: String): String
Функция регулярного выражения replace() заменяет все совпадающие шаблоны из входной последовательности символов указанной строкой замены.
fun main(args: Array){
val replaceWith = Regex("beautiful")
val resultString = replaceWith.replace("this picture is beautiful","awesome")
println(resultString)
}
Выход:
this picture is awesome
Регулярное выражение ofreplaceFirst(input: CharSequence, replacement: String): String
Функция регулярного выражения replaceFirst() заменяет первое вхождение совпадающего шаблона из входной последовательности символов указанной строкой замены.
fun main(args: Array){
val replaceWith = Regex("beautiful")
val resultString = replaceWith.replaceFirst("nature is beautiful, beautiful is nature","awesome")
println(resultString)
}
Выход:
nature is awesome, beautiful is nature
ofsplit(input: CharSequence, limit: Int = 0): List<String>
Функция regex split() разбивает входную последовательность символов в соответствии с предоставленным шаблоном. Это значение разделения возвращается в список.
fun main(args: Array){
val splitedValue = Regex("""\d+""").split("ab12cd34ef")
val nonsplited= Regex("""\d+""").split("nothing match to split" )
println(splitedValue)
println(nonsplited)
}
Выход:
[ab, cd, ef] [nothing match to split]
Regex шаблоны
Regex использует несколько символических обозначений(шаблонов) в своей функции в Котлин. Некоторые часто используемые шаблоны приведены ниже:
| Символ | Описание |
|---|---|
| x|у | Соответствует либо x, либо y |
| xу | Соответствует x, за которым следует y |
| [xyz] | Соответствует x,y,z |
| [xz] | Соответствует любому символу от x до z |
| [^xz] | ‘^’ в качестве первого символа отменяет шаблон. Это соответствует всему, что находится за пределами диапазона xz |
| ^xyz | Соответствует выражению xyz в начале строки |
| xyz$ | Соответствует выражению xyz в конце строки |
| . | Соответствует любому одиночному символу |
Мета-символы регулярного выражения
| Символ | Описание |
|---|---|
| \d | Соответствует цифрам([0-9]) |
| \D | Не содержит цифры |
| \w | Соответствует символам слова |
| \W | Соответствует символам, не являющимся словами |
| \s | Соответствует пробелам [\t\r\f\n] |
| \S | Соответствует непробельным символам |
| \b | Соответствует границе слова вне скобок. Соответствует обратной косой черте при помещении в скобки |
| \B | Соответствует границе слова |
| \A | Соответствует началу строки |
| \Z | Соответствует концу строки |
Шаблоны квантификаторов
| Символ | Описание |
|---|---|
| abcd? | Соответствует 0 или 1 вхождению выражения abcd |
| abcd* | Соответствует 0 или более вхождениям выражения abcd |
| abcd+ | Соответствует 1 или более вхождениям выражения abcd |
| abcd {х} | Соответствует точному количеству x вхождений выражения abcd |
| abcd{x,} | Соответствует x или более вхождениям выражения abcd |
| abcd {х, у} | Сопоставляет от x до y вхождений выражения abcd |
Шаблоны регулярных выражений
| Шаблон | Описание |
|---|---|
| ([^\s]+(?=\.(jpg|gif|png))\.\2) | Соответствует изображениям jpg, gif или png. |
| ([А-Zа-z0-9-]+) | Соответствует последнему, числу и дефису. |
| (^[1-9]{1}$|^[1-4]{1}[0-9]{1}$|^100$) | Соответствует любому числу от 1 до 100 включительно. |
| (#?([A-Fa-f0-9]){3}(([A-Fa-f0-9]){3})?) | Соответствует допустимому шестнадцатеричному цветовому коду. |
| ((?=.*\d)(?=.*[az])(?=.*[AZ]).{8,15}) | Соответствует строке от 8 до 15 символов, по крайней мере, с одним прописным регистром, одним строчным регистром и одной цифрой. |
| (\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6}) | Совпадает с адресом электронной почты. |
| (\<(/?[^\>]+)\>) | Соответствует тегам HTML. |
