Найти в Дзене
Игровой движок Godot engine

№76. Фильтруем стринг при помощи RegEx.

В этой статье не будет тотального разбора RegEx, по причине объемности темы.

Рассмотрим базовые понятия на простом примере.

Регулярное выражение - это компактный язык, который можно использовать для распознавания строк, следующих определенному шаблону.

Задача : Нам надо получать от пользователя его имя. Но есть условие : в данных могут быть только буквы и цифры.

Перебирать каждый символ в данных и сравнивать его с тем что разрешено совсем не вариант. И использование регулярных выражений тут подходит как нельзя лучше.

В годо regex это отдельный класс.

Добавляем regex в проект, и подключаем метод compile()
В последний надо вписать шаблон, по которому будет идти проверка.
Для примера напишем «[0-9]», и производим поиск.
В результате получим только цифры.

-2

Если мы применим шаблон «[a-z]», то в выводе получим «abc»

-3

Знак «+» тут означает то, что будем перебирать все знаки , а не только первый.

Но, если мы поменяем строку на «abc123xyz», и попробуем вытянуть только буквы — то получим только «abc».
Так происходит потому что наш шаблон настроен только на буквы, и если он видит несовпадение ( цифры ) то поиск считается завершенным.

Для поиска во всем стринге можно использовать search_all.

-4

Результатом будет «abcxyz».

Но вернемся к основной задаче — нам надо модифицировать стринг чтобы в итоге были только буквы и цифры. Посему пишем «[a-z0-9]».
Так как перебор идет в цикле, то результат мы будем склеивать в одно слово.

-5

Я специально вставил символ «$» который не является ни буквой и не цифрой, чтобы удостоверится что всё работает как надо. В итоге мы получим «master123or66slave»

Но в нашем шаблоне нет учитывания заглавных букв. Исправим это, добавив их в шаблон : «[a-zA-Z0-9]»

-6

Ну и результат : Test12thisShit
Как видим текст очистился от лишних символов. И можно его принимать.

Ну и для закрепления добавим еще проверку на русские буквы + пробел:

результат — Вася12 this34Shit
результат — Вася12 this34Shit

***

Альтернативно, можно использовать шаблон «\w» (words). Он подразумевает что данные представляют из себя «слово». Это либо цифра, либо буква. Символы тут исключаются.

результат как и в прошлый раз -Test12this34Shit
результат как и в прошлый раз -Test12this34Shit

«\W» —если сменить на заглавную, то будет всё наоборот.Результатом будут только запрещенные символы.
«\d» —только цифры
«\D» —только буквы

Для распознавания кириллицы можно использовать «\p{Cyrillic}»

результат — Вася12 this34Shit
результат — Вася12 this34Shit

Для оповещения пользователья о том, что в его данных не всё хорошо , можно сравнивать стринг ДО и ПОСЛЕ.

В годо регулярные выражения основаны на библиотеке PCRE2 , по этой ссылке можно найти разбор каждого символа.

Надеюсь вам был полезен этот материал.
Подписывайтесь на канал, и
вступайте в группу в ВК.