Генерируем тестовые данные: как по регулярному выражению сконструировать строку, ему соответствующую

Есть регулярное выражение. Как для теста регулярки подобрать строки, на которые оно будет реагировать? Для этого надо разобрать само выражение.

Выражение:

^\W+\d{2}\s?\.([abc\d])\1\1$

Что значит вся эта клинопись? В действительности здесь нет ничего загадочного. Просто нужно разобрать выражение по шагам. Например, такие слешы \ означают что следом за ними идет нечто специальное. Плюсы и знаки вопроса – это квантификаторы, то есть модификаторы количества. Цифры в фигурных скобках тоже квантификаторы. Если написано {2} – значит символ должен встречаться ровно два раза. Какой символ? Тот, который написан перед этой конструкцией.

Итак, по шагам.

^ – означает “в начале строки”. Тут важно не перепутать: если символ крышки идет после открывающей квадратной скобки, тогда он значит отрицание. [^A] означает “все, что угодно, но не большая буква А”.

\W – специальный символ кроме символа нижнего подчеркивания. В группу специальных символов также входят горизонтальный и вертикальный табы, символ перевода строки, знаки препинания и арифметических действий.

Плюсик – предыдущий паттерн встречается как минимум один раз (один, семь, сто двадцать девять раз). Вместе:

\W+ – специальный символ кроме символа нижнего подчеркивания, встретившийся не менее одного раза.

\d – цифра. Вместе с квантификатором:

\d{2} – цифра, которая встретилась ровно два раза.

\s – любой “whitespace” символ, то есть пробел или таб или новая строка. С квантификатором:

\s? – знак вопроса. То есть этот пробел встречается ноль или один раз.

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

\. – это точка.

. – это любой единичный символ.

Круглые скобки – группа. Это то, что подлежит выделению внутри всего совпадающего с образцом текста. Выделенную группу можно использовать в дальнейшем. Наша группа:

[abc\d] – все, что в квадратных скобках – это перечисление. В данном случае мы ищем совпадение с символом a, или с символом b, или с символом c, или с \d, что, как мы уже знаем, означает цифру. То есть подходит любой из символов “a”, “b”, “c” или цифра. Поскольку этот образец забран в круглые скобки, мы его запомнили. Дальше:

\1 – а это и есть обращение к первой из запомненных групп. То есть после нахождения a, b, c или цифры мы ждем опять совпадение с a, b, c или цифрой.

\1$ – то же, что и в предыдущем абзаце, но в конце строки. Символ доллара означает “в конце строки”.

Собираем все вместе: мы ищем строки, которые начинаются со специального символа, он должен быть как минимум один или их может быть несколько, следом за ним (ними) идет ровно две цифры, затем символ пробела (в широком смысле), который встречается ноль или один раз, затем символ “a” или “b”, или “c” или цифра, и мы его запомнили, затем то, что мы запомнили и затем опять то, что мы запомнили, но уже строго в конце строки.

Соберу по этому описанию пару строк: :18 .aaa и (51.888

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

Результат:

Изучайте сайт http://regex101.com . Успешного тестинга!

Leave a Reply

Your email address will not be published. Required fields are marked *