Как вы отлаживаете регулярное выражение? [закрытый]
регулярные выражения могут стать довольно сложными. Отсутствие белого пространства затрудняет их чтение. Я не могу шагать через регулярное выражение с отладчиком. Так как же специалисты отлаживают сложные регулярные выражения?
21 ответ:
покупать RegexBuddy и использовать его встроенный функции отладки. Если вы работаете с регулярными выражениями более двух раз в год, вы вернете эти деньги в сэкономленное время в кратчайшие сроки. RegexBuddy также поможет вам создавать простые и сложные регулярные выражения, и даже генерировать код на разных языках.
кроме того, по словам разработчика, этот инструмент работает почти безупречно на Linux при использовании с Вино.
С Perl 5.10,
use re 'debug';
. (Илиdebugcolor
, но я не могу правильно отформатировать вывод при переполнении стека.)$ perl -Mre=debug -e'"foobar"=~/(.)/' Compiling REx "(.)" Final program: 1: OPEN1 (3) 3: REG_ANY (4) 4: CLOSE1 (6) 6: REF1 (8) 8: END (0) minlen 1 Matching REx "(.)" against "foobar" 0 <> <foobar> | 1:OPEN1(3) 0 <> <foobar> | 3:REG_ANY(4) 1 <f> <oobar> | 4:CLOSE1(6) 1 <f> <oobar> | 6:REF1(8) failed... 1 <f> <oobar> | 1:OPEN1(3) 1 <f> <oobar> | 3:REG_ANY(4) 2 <fo> <obar> | 4:CLOSE1(6) 2 <fo> <obar> | 6:REF1(8) 3 <foo> <bar> | 8:END(0) Match successful! Freeing REx: "(.)"кроме того, вы можете добавить пробелы и комментарии к регулярным выражениям, чтобы сделать их более читаемыми. В Perl, это делается с помощью
/x
модификатор. Сpcre
, естьPCRE_EXTENDED
флаг."foobar" =~ / (.) # any character, followed by a # repeat of previously matched character /x; pcre *pat = pcre_compile("(.) # any character, followed by a\n" "\1 # repeat of previously matched character\n", PCRE_EXTENDED, ...); pcre_exec(pat, NULL, "foobar", ...);
Я добавлю еще один, чтобы не забыть:debuggex
Это хорошо, потому что это очень визуальный:
когда я застреваю на регулярном выражении, я обычно обращаюсь к этому: https://regexr.com/
его идеально подходит для быстрого тестирования, где что-то идет не так.
Я использую Кодос - Отладчик Регулярных Выражений Python:
Kodos-это утилита Python GUI для создания, тестирования и отладки регулярных выражений для языка программирования Python. Kodos должен помочь любому разработчику эффективно и легко разрабатывать регулярные выражения в Python. Поскольку реализация регулярных выражений Python основана на PCRE стандарт, Кодос должен принести пользу разработчикам на других языках программирования это также соответствует стандарту PCRE (Perl, PHP и т. д...).
(...)
работает на Linux, Unix, Windows, Mac.
Я думаю, что они не. Если ваше регулярное выражение является слишком сложным, и проблемные точки вам нужен отладчик, вы должны создать конкретный парсер, или использовать другой метод. Это будет гораздо более читабельным и поддерживаемым.
есть отличный бесплатный инструмент тренер регулярных выражений. Последняя версия доступна только для Windows; ее автор доктор Эдмунд Вайц прекратил поддерживать версию Linux, потому что слишком мало людей загрузили ее, но на странице загрузки есть более старая версия для Linux.
Я только что видел презентацию Regexp:: Debugger его создателем: Damian Conway. Очень впечатляющие вещи: бег на месте или с помощью командной строки инструмент (rxrx), в интерактивном режиме или на "вход" выполнение файл (хранится в JSON), шаг вперед и назад в любой момент, останавливается на точках останова или события, цветная выхода (конфигурируемых пользователем), тепловые карты на регулярное выражение и строку для оптимизации и т. д...
доступно на CPAN для бесплатный: http://search.cpan.org/~dconway/Регулярное_выражение-отладчик/Либ/регулярное выражение/отладчик.ПМ
Я использую этот онлайн-инструмент для отладки регулярных выражений:
Но да, он не может победить RegexBuddy.
Я отлаживаю свои регулярные выражения собственными глазами. Вот почему я использую
/x
модификатор, писать комментарии для них и разделить их на части. Читайте Джеффри Фридла Использование Регулярных Выражений чтобы узнать, как разрабатывать быстрые и читаемые регулярные выражения. Различные инструменты отладки регулярных выражений просто провоцируют Программирование вуду.
Что касается меня, я обычно использую утилиту pcretest, которая может сбрасывать байтовый код любого регулярного выражения, и обычно его гораздо легче читать (по крайней мере для меня). Пример:
PCRE version 8.30-PT1 2012-01-01 re> /ab|c[de]/iB ------------------------------------------------------------------ 0 7 Bra 3 /i ab 7 38 Alt 10 /i c 12 [DEde] 45 45 Ket 48 End ------------------------------------------------------------------
Я использую:
http://regexlib.com/RETester.aspx
вы также можете попробовать Regex Hero (использует Silverlight):
Если я чувствую себя застрявшим, мне нравится идти назад и генерировать регулярное выражение непосредственно из образца текста с помощью txt2re (хотя я обычно заканчиваю настройку полученного регулярного выражения вручную).
Если вы пользователь Mac, я только что наткнулся на этот:
http://atastypixel.com/blog/reginald-regex-explorer/
Это бесплатно и просто в использовании, и это было большим подспорьем для меня, чтобы справиться с регулярными выражениями в целом.
посмотреть (не бесплатно) инструменты ВКЛ regular-expressions.info.RegexBuddy в частности. вот сообщение Джеффа Этвуда на эту тему.
запись reg exes с использованием нотации, такой как PCREs, похожа на запись ассемблера: это нормально, если вы можете просто видеть соответствующие конечные автоматы в своей голове, но это может быть трудно поддерживать очень быстро.
причины неиспользования отладчика во многом те же, что и для неиспользования отладчика с языком программирования: вы можете исправить локальные ошибки, но они не помогут вам решить проблемы проектирования, которые привели вас к локальным ошибкам в первом место.
более рефлексивный способ-использовать представления данных для генерации регулярных выражений на вашем языке программирования и иметь соответствующие абстракции для их построения. Олин дрожи введение в его схему и обозначения дает отличный обзор проблем, с которыми сталкиваются при проектировании этих представлений данных.
Я часто использую pcretest-вряд ли" отладчик", но он работает над текстовым SSH-соединением и анализирует именно тот диалект регулярных выражений, который мне нужен: мой (C++) код ссылается на libpcre, поэтому нет никаких трудностей с тонкими различиями в том, что волшебно, а что нет и т. д.
в целом я согласен с парнем выше, которому нужен отладчик регулярных выражений-это запах кода. Для меня самое сложное в использовании регулярных выражений обычно не само регулярное выражение, а несколько слоев цитирования, необходимых для их создания работа.
Я часто использую Ruby на основе regexp tester Rubular
, а также в Emacs использовать M-xre-builder
Firefox также имеет полезное расширение
Я использую инструментарий Rx, включенный в ActiveState Komodo.
вы можете попробовать это http://www.pagecolumn.com/tool/regtest.htm
для меня, после того, как я посмотрел на регулярное выражение (поскольку я довольно свободно и почти всегда использую /x или эквивалент), я мог бы отлаживать, а не проверять, если я не уверен, что я ударил бы какое-то вырожденное соответствие (т. е. что-то, что чрезмерно отступает), чтобы увидеть, могу ли я решить такие проблемы, например, изменив жадность оператора.
для этого я бы использовал один из методов, упомянутых выше: pcretest, RegexBuddy (если мое текущее рабочее место лицензировало его) или аналогичный, и иногда я время его в Linqpad, если я работаю в C# regexes.
(трюк perl является новым для меня, поэтому, вероятно, добавит это в мой инструментарий регулярных выражений.)