20 декабря 2013 г.

Веб-тулы для проверки регулярных выражений

Пара удобных онлайн-инструментов для тестирования регулярок:

http://gskinner.com/RegExr/ - сделано на Flash, поддерживается, по моему, только PCRE.

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

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

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

Отдельно нужно оговорить, что при наведении на шаблон, подсвечиваются группы и выдается подсказка, что конкретная часть шаблона делает. Не всегда работает корректно, замечены глюки с использованием экранированных спец-символов. Например, при поиске названия функции по такому шаблону - "([^\s\(]+)" - при наведении будет писать, что не найдена закрывающая скобка.



http://regex101.com/ - сделано на JavaScript, поддерживается PHP (PCRE), JavaScript, Python.

Дизайн также довольно удобен, но данный сервис "одноразовый" - ничего нигде не сохраняется. Главное отличие от предыдущего сервиса - улучшенная работа с разбором регулярных выражений - автоматическое выделение групп в самом шаблоне разными цветами (и, по моему, такими же цветами и в исходном тексте подсвечивается найденное, но не уверен).

Два самых важных отличия - отображение результатов и детальный разбор шаблона.

Отсутствие "замены" компенсируется наличием отображения результатов поиска, чего в первом инструменте нет.

Детальный же разбор шаблона - крайне полезная штука. Благодаря ему для себя узнал интересные особенности работы регулярных выражений с повторяемыми "группами захвата". Оказывается, сохраняется только последняя.

Очень удобно пользоваться этим инструментом, когда нужно понять, что же происходит в чужом сложном трехэтажном шаблоне.