чето нихрена не понимаю пока. я если что регулярки стороной пока обхожу
Регулярка - это такое правило по которому специальный очень оптимизированный код ищет совпадения в тексте.
Например что-то типа: "строка "ля" от 3 до 6 раз в начале строки".
Выглядеть это будет вроде-бы как-то вот так:
^|\n(ля){3,6}
И когда специальный метод наткнётся в тексте на строку начинающуюся с ляляляля, он с ней что-то сделает. Зависит от метода. Есть поиск до первого найденного, есть поиск всех совпадений, есть замена текста на другой... Если ты когда нибудь городил леса ифов для поиска совпадений в тексте, скорее всего тебе нужна регулярка
Регулярки состоят из символов, группировок символов, вариаций, повторений, обязательности/необязательности и т.д. Проблема в том, что они очень нечитаемы. Например так будет выглядеть поиск емайла в тексте и его разделение на имя пользователя и URL-адрес:
([\d\w\-_]{4,32})@((?:www\.)?([\d\w-_]{3,64}\.\d{2,5}))
Но это очень нечитаемо. По сути нужно вчитываться в каждый символ и думать о его значении. Но с другой стороны императивно такое не решить.
Я хочу превратить это в ООП-стиль с перегрузками операторов. Мы объединяем разные читабельные объекты в один, а потом вызываем метод, который выдаст нам регулярку как ту сверху.
Что-то типа такого:
val urlSymbols = anyOf(Char, Digit, '_', '-', '%')
val user = urlSymbols.repeat(4, 32)
val url = RString("www.").optional() + urlSymbols.repeat(4, 64) + '.' + Symbol.repeat(2, 5)
val email = user.find() + '@' + url.find()
val emailRegex = email.getRegex()