Регулярные выражения или, вкратце, Regex, лучше всего можно описать простым языком как средство для обозначения того, как может быть сгенерирован шаблон и какие все шаблоны будут приняты как допустимая строка самим Regex. Например, dog также является регулярным выражением, которое соответствует строке «собака».

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

Персонажи и группы

Все, что есть на вашей клавиатуре (символы ASCII), обычно используется в качестве алфавита для вашего регулярного выражения. (На практике значки на клавиатуре не так хорошо работают, но мы можем попробовать и это, хорошо?)

Алфавит определяется как набор символов, которые регулярное выражение будет использовать для определения своих правил. Например, алфавит английского языка состоит из букв от A до Z

Давайте сначала посмотрим на регулярное выражение b[ae]d. Ваше первое предположение, как новичка, будет заключаться в том, что она соответствует строке baed, но это было бы неверно.
Видите ли, символы a и e заключены в []. Это имеет особое значение в мире регулярных выражений. Вы должны выбрать только один элемент из всех элементов, заключенных в [], при создании одной строки, которая может возникнуть из шаблона, определенного регулярным выражением. Следовательно, регулярное выражение соответствует как "bad", так и "bed".

Но как написать регулярное выражение для выбора одного символа из длинного списка символов, скажем, из ijklmnopqrst? Разве это не переведет на [ijklmnopqrst]? Да, это правильно, но действительно громоздко. Более простой способ сделать это - представить его в виде диапазона, например [i-t], и все готово.

Теперь перейдем к регулярному выражению m(ar|oc)k. Обратите внимание на то, что некоторые символы заключены в ()символов. Также обратите внимание, что между ar и oc есть |.

() означает, что это миниатюрные регулярные выражения, а | означает, что вам нужно выбрать между левым миниатюрным регулярным выражением или правым миниатюрным регулярным выражением.

Теперь мой вопрос к вам: какие все строки будут генерироваться этим шаблоном? Проверьте ответ в конце поста!

. - это подстановочный знак в стране регулярных выражений. Он представляет собой выбор любого символа из алфавита. Для более глубокого понимания попробуйте на платформе regexr.

Квантификаторы

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

Несколько общих квантификаторов: _13 _, _ 14 _, _ 15_ и {a,b}.

Квантификатор *

Предыдущий элемент повторяется ноль или более раз.

Пример 1: a* соответствует ‘’ (пустая строка), ‘a’, ‘aa’, ‘aaa’, ...

Пример 2: (mark|lol)* соответствует '', 'mark', 'markmark', 'markmark', ... и 'lol', 'lollol', 'lollollol', ... и 'marklol' , 'marklollol', 'marklolmark', ... и 'lolmark', 'lolmarklol', 'lolmarkmark', ... (вы понимаете, верно?)

Квантификатор +

Предыдущий элемент повторяется 1 или более раз, или, как я узнал, (element)(element)*

Пример 1: a+ соответствует "a", "aa", "aaa", ...

Пример 2: [ab]+ соответствует 'a', 'b', 'aa', 'bb' ... и 'ab', 'ba', 'aab', 'aba', 'baa' , 'bba', ...

Квантификатор ?

Предыдущий элемент повторяется ровно ноль или 1 раз.

Пример 1: a?b соответствует только "b" и "ab"

Пример 2: (mark|lol)?_zuckerberg соответствует только "mark_zuckerberg", "lol_zuckerberg" и "_zuckerberg".

Квантификатор {a,b}

Предыдущий элемент повторяется не менее a раз и не более b раз.

Пример 1: hm{2,4} соответствует только "хмм", "хммм" и "хмммм"

Пример 2: l(ol){1,3} соответствует только "lol", "lolol" и "lololol"

Квантификатор {a}

На самом деле это просто альтернативное представление квантификатора {a,a}.

Оставив записку

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

Шаблон регулярного выражения m(ar|oc)k генерирует только строки «mark» и «mock». Престижность вам, если вы поняли это правильно! Если нет, попробовать еще раз?

Напишите мне здесь, дайте мне знать, если есть какие-либо технические ошибки, или что вы сочли непонятным, или что-то еще, что вас интересует.

Это как раз то, что я слушал в виде 1-часового микса, когда писал эту запись в блоге: