# `TITextProcessing` ### Библиотека для работы с регулярными выражениями ## - `TextFormatter` Класс `TextFormatter` представляет из себя сервис, принимающий регулярное выражение на вход и предоставляющий возможность генерации следующих объектов: \- `Replacement template` из `getRegexReplacement()`;
\- `Placeholder` из `getRegexPlaceholder()`;
\- `Formatter text` из `getFormattedText(_ text: String)` #### `func getRegexReplacement()` Метод, преобразующий входящее регулярное выражение в шаблон подстановки, например: **Input**: `(\\d{4}) ?(\\d{4}) ?(\\d{4}) ?(\\d{4})`
**Output**: `$1 $2 $3 $4` ```swift import Foundation import TITextProcessing let cardNumberTextFormatter = TextFormatter(regex: "(\\d{4}) ?(\\d{4}) ?(\\d{4}) ?(\\d{4})") print(cardNumberTextFormatter.getRegexReplacement()) /* Выведет в консоль: "$1 $2 $3 $4" */ ``` #### `func getRegexPlaceholder()` Метод, преобразующий входящее регулярное выражение в текст-заполнитесь a.k.a placeholder, например: **Input**: `(\\d{4}) ?(\\d{4}) ?(\\d{4}) ?(\\d{4})`
**Output**: `1234 5678 9012 3456` ```swift print(cardNumberTextFormatter.getRegexPlaceholder()) /* Выведет в консоль: "1234 5678 9012 3456" */ ``` #### `func getFormattedText(_ text: String) -> String` Метод, преобразующий входящий текст к нужному формату, заранее определенному посредством указания регулярного выражения, например: **Input**: `2200111555550080`
**Output**: `2200 1115 5555 0080` > P.S. Учитываем, что `TextFormatter` был проинициализирован со слеюущим регулярным выражением: `(\\d{4}) ?(\\d{4}) ?(\\d{4}) ?(\\d{4})` ```swift print(cardNumberTextFormatter.getFormattedText("2200111555550080")) /* Выведет в консоль: "2200 1115 5555 0080" */ ``` ## - `RegexReplaceGenerator` Класс, отвечающий за генерацию `PCREGeneratorItem` из входящего регулярного выражения. Использует библиотеку `Antlr4` и `PCRE` для работы. #### `func generateReplacement(for regex: String) -> PCREGeneratorItem` Функция, преобразующий входящее регулярное выражение в структуру, содержащую шаблон подстановки и матрицу символов, например: ```swift let replaceGenerator: RegexReplaceGenerator = DefaultRegexReplaceGenerator() let item = replaceGenerator.generateReplacement(for: "(\\d{2})\\/?(\\d{2})") print(item.regexReplaceString) /* Выведет в консоль: "$1\\/$2" */ print(item.matrixOfSymbols) /* Выведет в консоль: [ ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"], ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"], ["/"], ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"], ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] ] */ ``` Итоговый `PCREGeneratorItem` содержит следующие данные: `regexReplaceString` - итоговый шаблон подстановки для изначального регулярного выражения;
`matrixOfSymbols` - матрица символов, содержащая все возможные символы для каждого элемента в изначальном регулярном выражении ## - `RegexPlaceholderGenerator` Класс, отвечающий за генерацию текста-заполнителя a.k.a placeholder. #### `func generatePlaceholder(matrixOfSymbols: [[Character]]) -> String` Функция, преобразующая входящую матрицу символов в текст-заполнитель, например: ```swift let matrix: [[Character]] = [ ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"], ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"], ["/"], ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"], ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] ] let placeholderGenerator: RegexPlaceholderGenerator = DefaultRegexPlaceholderGenerator() let placeholder = placeholderGenerator.generatePlaceholder(matrixOfSymbols: matrix) print(placeholder) /* Выведет в консоль: "12/34" */ ``` ## - Примеры использования: ```swift // MARK: - Форматирование даты let dateRegex = "(\\d{2})\\/?(\\d{2})" let dateInputText = "1525" let dateTextFormatter = TextFormatter(regex: dateRegex) print(dateTextFormatter.getRegexPlaceholder()) /* Выведет в консоль: "12/34" */ print(dateTextFormatter.getFormattedText(dateInputText)) /* Выведет в консоль: "15/25" */ // MARK: - Форматирование номера телефона let phoneRegex = "(?:\\+7 )?\\(?(\\d{3})\\)? ?(\\d{3}) ?(\\d{2}) ?(\\d{2})" let phoneInputText = "9995534820" let phoneTextFormatter = TextFormatter(regex: phoneRegex) print(phoneTextFormatter.getRegexPlaceholder()) /* Выведет в консоль: "+7 (123) 456 78 90" */ print(phoneTextFormatter.getFormattedText(phoneInputText)) /* Выведет в консоль: "+7 (999) 553 48 20" */ ```