Регулярные выражения (далее 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. Справка
- Более подробное описание по регуляркам на википедии.
- Онлайн проверка регулярных выражений. (must have!)