Регулярные выражения могут стать довольно сложными. Отсутствие пробелов затрудняет их чтение. Я не могу шагнуть, хотя регулярное выражение с отладчиком. Итак, как эксперты отлаживают сложные регулярные выражения?
Как вы отлаживаете регулярное выражение?
Ответ 1
Вы покупаете RegexBuddy и используете его встроенный debug особенность. Если вы работаете с регулярными выражениями более двух раз в год, вы вернете эти деньги вовремя, сохраненные в кратчайшие сроки. RegexBuddy также поможет вам создавать простые и сложные регулярные выражения и даже генерировать код для вас на разных языках.
 
Кроме того, по словам разработчика, этот инструмент работает почти безупречно на Linux при использовании с WINE.
Ответ 2
С Perl 5.10, use re 'debug';. (Или debugcolor, но я не могу правильно отформатировать вывод в Stack Overflow.)
$ perl -Mre=debug -e'"foobar"=~/(.)\1/'
Compiling REx "(.)\1"
Final program:
   1: OPEN1 (3)
   3:   REG_ANY (4)
   4: CLOSE1 (6)
   6: REF1 (8)
   8: END (0)
minlen 1
Matching REx "(.)\1" 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: "(.)\1"
Кроме того, вы можете добавлять пробелы и комментарии к регулярным выражениям, чтобы сделать их более читаемыми. В Perl это делается с помощью модификатора /x. С pcre существует флаг PCRE_EXTENDED.
"foobar" =~ /
    (.)  # any character, followed by a
    \1   # 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", ...);
Ответ 3
Я добавлю еще один, чтобы не забыть: debuggex
Это хорошо, потому что это очень визуально: 
Ответ 4
Когда я застреваю в регулярном выражении, я обычно обращаюсь к этому: https://regexr.com/
Это идеально подходит для быстрого тестирования, где что-то идет не так.
Ответ 5
Я использую Kodos - отладчик регулярных выражений Python:
Kodos - это утилита Python GUI для создания, тестирования и отладки регулярных выражений для языка программирования Python. Kodos должен помочь любому разработчику эффективно и без усилий разрабатывать регулярные выражения в Python. Поскольку реализация регулярных выражений в Python основана на стандарте PCRE, Kodos должен помочь разработчикам на других языках программирования, которые также придерживаются стандарта PCRE (Perl, PHP и т.д.).
(...)
Работает на Linux, Unix, Windows, Mac.
Ответ 6
Я думаю, что нет. Если ваше регулярное выражение является слишком сложным и проблематичным до такой степени, что вам нужен отладчик, вы должны создать конкретный синтаксический анализатор или использовать другой метод. Он будет гораздо читабельнее и удобнее.
Ответ 7
Существует отличный бесплатный инструмент, тренер Regex. Последняя версия доступна только для Windows; его автор доктор Эдмунд Вейц прекратил поддерживать версию Linux, потому что слишком мало людей загрузило ее, но на странице загрузки есть более ранняя версия для Linux.
Ответ 8
Я только что видел презентацию Regexp:: Debugger ее создателем: Дамиан Конвей. Очень впечатляющие вещи: запускать inplace или использовать инструмент командной строки (rxrx), интерактивно или в "зарегистрированном" исполняемом файле (хранящемся в JSON), переходить вперёд и назад в любую точку, останавливаться на контрольных точках или событиях, цветной вывод (настраиваемый пользователем), тепловые карты по регулярному выражению и строке для оптимизации и т.д.
Доступно на CPAN бесплатно: http://search.cpan.org/~dconway/Regexp-Debugger/lib/Regexp/Debugger.pm
Ответ 9
Я использую этот онлайн-инструмент для отладки моего регулярного выражения:
Но да, он не может победить RegexBuddy.
Ответ 10
 Я отлаживаю свои регулярные выражения своими глазами. Поэтому я использую модификатор /x, пишу для них комментарии и делю их на части. Прочтите Джеффри Фридла " Освоение регулярных выражений", чтобы узнать, как разрабатывать быстрые и удобочитаемые регулярные выражения. Различные инструменты отладки регулярных выражений просто провоцируют программирование вуду.
Ответ 11
Как и для меня, я обычно использую утилиту 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
------------------------------------------------------------------
Ответ 12
Я использую:
http://regexlib.com/RETester.aspx
Вы также можете попробовать Regex Hero (использует Silverlight):
Ответ 13
Если я чувствую себя застрявшим, мне нравится возвращаться и генерировать регулярное выражение непосредственно из образца текста, используя txt2re (хотя Я обычно в конечном итоге настраиваю полученное регулярное выражение вручную).
Ответ 14
Если вы пользователь Mac, я просто натолкнулся на это:
http://atastypixel.com/blog/reginald-regex-explorer/
Это бесплатное и простое в использовании, и мне очень помогло справиться с RegExs в целом.
Ответ 15
Посмотрите на инструменты (non-free) на regular-expressions.info. RegexBuddy в частности. Вот сообщение Джеффа Этвуда по теме.
Ответ 16
Запись реестров с использованием нотации, такой как PCRE, похожа на запись ассемблера: это прекрасно, если вы можете просто увидеть соответствующие автоматы с конечным состоянием в голове, но это может быть трудно поддерживать очень быстро.
Причины отказа от использования отладчика - это то же самое, что и не использовать отладчик с языком программирования: вы можете исправить локальные ошибки, но они не помогут вам решить проблемы с дизайном, которые привели вас к локальным ошибкам в первую очередь.
Более рефлексивный способ - использовать представления данных для генерации регулярных выражений на вашем языке программирования и иметь соответствующие абстракции для их создания. Введение Olin Shiver в его схему regexp notation дает отличный обзор проблем, возникающих при проектировании этих представлений данных.
Ответ 17
Я часто использую pcretest - вряд ли "отладчик", но он работает над текстовым SSH-соединением и анализирует точно нужный диалект регулярного выражения: мои (С++) ссылки на libpcre, поэтому нет никаких трудностей с тонкими различиями в том, что магия, а что нет, и т.д.
В общем, я согласен с парнем выше, которому нужен отладчик регулярных выражений - это запах кода. Для меня труднее всего использовать регулярные выражения, как правило, не самого регулярного выражения, а несколько слоев цитирования, необходимых для их работы.
Ответ 18
Я часто использую Ruby regexp tester Rubular
а также в Emacs используйте M-x re-builder
В Firefox также есть полезное расширение
Ответ 19
Я использую Rx Toolkit, который включен в ActiveState Komodo.
Ответ 20
Вы можете попробовать это http://www.pagecolumn.com/tool/regtest.htm
Ответ 21
Для меня, после того, как я просмотрел регулярное выражение (поскольку я довольно свободно владею и почти всегда использую /x или эквивалент), я мог бы отлаживать, а не тестировать, если я не уверен, ударил бы я несколько вырожденных соответствий (то есть что-то, что чрезмерное отставание), чтобы увидеть, могу ли я решить такие проблемы, например, изменив жадность оператора.
Чтобы сделать это, я бы использовал один из методов, упомянутых выше: pcretest, RegexBuddy (если мое текущее рабочее место лицензировало его) или подобное, и иногда я использую его в Linqpad, если я работаю в регулярных выражениях С#.
(Perl-трюк для меня новый, поэтому, вероятно, это добавит и к моему инструменту regex).

