Для тех, кому проще воспринимать абстрактные вещи через физические образы, может пригодиться необычный веб-инструмент Regex Marble Run от разработчика под ником bottomless. Пользователь вводит проверяемое регулярное выражение и строку, а сайт строит виртуальную машину с шариками, которая наглядно показывает, как регулярное выражение разбирает строку на части.
Если открыть пример по ссылке, можно увидеть выражение «^[hH]ack.[dD][^0-9]*$», которое человеку, не знакомому с регулярными выражениями, покажется настоящим шифром. На деле всё довольно просто, если разбирать его по кусочкам.
Символ «^» требует совпадения с началом строки. Так, шаблон «^dog» совпадёт со словами «dog» и «dog food», но не подойдёт для «food for a dog». Следующий фрагмент «[hH]» совпадает либо с «h», либо с «H». Дальше идёт «ack» — ровно эти три буквы. Значит, строка, начинающаяся с «hack» или «Hack», потенциально подходит — в зависимости от остальной части выражения.
Точка означает любой одиночный символ. Затем снова скобки «[]», но уже с «dD» — чтобы поймать любую «d» в любом регистре. Следующий класс символов «[0-9]» задаёт диапазон цифр от 0 до 9, но из-за стоящего внутри символа «^» совпадение инвертируется. То есть «[^0-9]» — это любой символ, кроме цифры. Звёздочка «*» разрешает ноль или больше таких символов. Поэтому «HackxD» подходит, но подходит и «HackxDXYZabc». Каверзный вопрос: совпадёт ли «HackxDXYZabc123»? Пока да, но только до строчной буквы «c».
Последний символ «$» означает конец строки. С ним «HackxDXYZabc123» уже не подходит, потому что совпадение обрывается в середине строки. А вот «HackxDXYZabc» подходит, ведь предыдущая «*» «съедает» весь остаток строки.
Голова идёт кругом? Сайт как раз и помогает это распутать: каждую букву тестовой строки он показывает в виде шарика, который падает через разные части регулярного выражения. Прошедшие проверку шарики оказываются в левом ящике, отсеянные — в правом. Поможет ли это освоить тему — вопрос открытый, но наблюдать за процессом действительно увлекательно.
Подобная визуализация особенно полезна тем, кто только начинает разбираться с регулярными выражениями или хочет освежить знания на практике, не продираясь через сухую документацию.
















