Регулярные выражения (RegExp)

Регулярные выражения (далее regexp или регулярка) — возможность задать шаблон / маску, по которой будет проверяться правильность ввода ответа. 

В каких случаях их стоит использовать? В любых, когда ответ имеет заданные критерии но не имеет 100% единственной записи и/или перечисления записей очень объемны. 

Популярные примеры которые могут пригодиться

— В поле ответа проходит совершенно любой код, из любых символов, любой длины: ".+" или ".{1,}"

— В поле ответа проходит только цифровой код любой длины: "[0-9]+"

— В поле ответа проходит любой код из 4 символов латинского алфавита: "[a-z]{4}"

— В поле ответа пройдет любой код кроме заданного(ых), пример кроме 23 и 1000: "^(?!(23|1000)$).*"

— В поле ответа проходит любой код начинающийся на какой то набор символов, пример "детский" (и будет срабатывать детский час, детский мир и тп): ^детский

— В поле ответа проходит любая последовательность заданных клеток, пример правильный ответ клетки А1 А5 В6 Б8 (4 шт) в любой последовательности:  (?:(а1|а5|в6|б8)(?!.*\1)){4}

— В поле ответа проходит любой код содержащий нужный адрес (чтоб не указывать точный формат ввода), например адрес "Красная, 43": "красна.*[^0-9]43$". Сработают все варианты: красная 43; красная43; ул. красная, 43; ул. красная, д.43. При этом не сработает ложный адрес: красная, д.143 или красная, д.432

— В поле ответа проходят нужный координаты с любыми разделителями, пример координат 56.123 40.218: "56[. ,]123.*40[. ,]218"

Ниже описан базовый синтаксис, который поможет реализовать и другие задачи

1. Проверка наличия вхождения заданного набора символов  

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

Пример

  • указали: крас
  • будет считаться верным: крас, красный, красное, прекрасный, взял красное ведро, и т.д. 
  • не будет считаться верным: кран, кра с, скра и т.д.

Для более сложных "масок" используются метасимволы и квантификаторы, в сочетании друг с другом дающие возможность сделать самы сложные маски.

2. Операторы вариативности символов (Метасимволы)

^ - Ограничение ответа вначале. Пример:

  • указали: ^крас
  • будет считаться верным: крас, красный, красное, красное ведро, и т.д.
  • не будет считаться верным: прекрасный, без прекрас, и т.д.

$ - Ограничение ответа в конце. Пример:

  • указали: крас$
  • будет считаться верным: крас, 45крас, без прекрас, и т.д.
  • не будет считаться верным: красный, красное, прекрасное ведро, и т.д.

. - Любой вариант одного символа. Пример:

  • указали: кр..с
  • будет считаться верным: краас, кр11сный, кр1%сное, прекраасный, и т.д.
  • не будет считаться верным: крас, крааас, перкраан и т.д.

[ ] - Символьный класс. Вариант одного символа с уточнениями из набора или диапазона символов заключенный в квадратные скобки. Все подряд идущие символы, включая знаки препинания и пробелы (за исключением "-") являются перечислением ([ая] - это возможные символы "а" или "я", если символы стоят через пробел [а я] то это "а", "я" или " "). Возможен единственный разделитель "-" который указывает диапазон ([б-м] - это весь диапазон букв от "б" до "м"). Пример:

  • указали: кр[ао]с[1-7]
  • будет считаться верным: крас1, крос5, окрас7, 11крас112, и т.д.
  • не будет считаться верным: краос5, крас9 и т.д.

[^ ] - Символ "любой кроме". Применяется внутри квадратных скобок после которого идет перечисление символов которые не входят в правильный вариант (иначе "допустимы все символы кроме перечисленных"). Пример:

  • указали: кр[^ао]с
  • будет считаться верным: кр1с, крeс55555, и т.д. (где третий символ любой кроме "а" или "о")
  • не будет считаться верным: крас, крос55555

( | ) - Группа перечисления. Круглые скобки являются группой, внутри которой через вертикальную черту идут перечисления правильных значений. Каждое значение может иметь любое количество символов, правильным будетя являться точное совпадение с набором. Пример:

  • указали: кр(а|оо|123)с([123]|[ав])
  • будет считаться верным: крас2, кра123са, → читается как: кр ("а" или "оо" или "123") с (или один из символов "1", "2" , "3" или один из символов "а", "в") 
  • не будет считаться верным: краоос1а и т.д.

3. Операторы определения количества символов (Квантификаторы)

Указываются после символа, класса или группы, и определяет сколько раз предшествующее выражение может повторяться.

? - повторяется 0 или 1 раз. Пример

  • указали: 012?3
  • будет считаться верным: 0123 или 013
  • не будет считаться верным: 01223

* -  повторяется 0 или больше раз (без ограничений). Пример

  • указали: 012*3
  • будет считаться верным: 013, 01222223 и т.д.
  • не будет считаться верным: 0133

+ - повторяется 1 или больше раз (без ограничений). Пример

  • указали: 012+3
  • будет считаться верным: 0123, 01222223 и т.д.
  • не будет считаться верным: 013

{N} - повторяется ровно N раз. Пример

  • указали: 0{3}123
  • будет считаться верным: 000123, 000123фывфы
  • не будет считаться верным: 100123

{M,N} повторяется от M до N раз включительно

{M,} повторяется не менее M раз

{,N} повторяется не более N раз 

4. Экранировние

\ - Вывод спецсимвола в регулярном выражении "как он есть". Список символов, которые необходимо экранировать: [ ] / ^ $ . | ? * + ( ) { }

Пример, необходимо, чтоб проходил любой ответ заканчивающийся на "ая." 

Если мы сделаем запись "ая.$", то точка здесь будет играть роль любого символа и в ответ будет проходить как "красная." так и "красная4".  Чтоб точка выполняла роль только самой себя, необходимо ее экранировать, и правильная запись регулярки будет выглядеть так "ая\.$"

5. Справка

Последнее обновление: 27 сентября 2023