Несохраняющие скобки в Kotlin
Скобки ( ) выполняют две функции -
группировка символов и функцию кармана. А
что делать, если нужно сгруппировать, но
в карман не класть? Для решения такой
проблемы придуманы специальные несохраняющие
скобки (?: ) - они группируют,
но не кладут в карман.
Пример
В следующем примере первые скобки нам нужны для группировки, а вторые - для кармана. Однако, и те, и другие скобки сохраняют данные в карман:
val txt = "abab123"
val res = Regex("(ab)+([1-9]+)").find(txt)
В результате в наших карманах будет следующее:
println(res?.groupValues[0]) # выведет 'abab123'
println(res?.groupValues[1]) # выведет 'ab'
println(res?.groupValues[2]) # выведет '123'
Пример
Сделаем так, чтобы первая пара скобок только группировала, но не клала в карман:
val txt = "abab123"
val res = Regex("(?:ab)+([1-9]+)").find(txt)
В результате в первом кармане будет наше число:
println(res?.groupValues[1]) # выведет '123'