Как вы отлаживаете регулярное выражение? [закрыто]

Вы можете создать свой собственный регистратор, перегрузив класс Logger

144
задан rook 27 February 2010 в 19:52
поделиться

14 ответов

Вы покупаете RegexBuddy и используете его встроенную функцию отладки . Если вы работаете с регулярными выражениями более двух раз в год, вы быстро вернете эти деньги вовремя. RegexBuddy также поможет вам создавать простые и сложные регулярные выражения и даже генерировать для вас код на разных языках.

alt text

Кроме того, по словам разработчика, этот инструмент почти безупречно работает на Linux при использовании с WINE .

67
ответ дан 23 November 2019 в 22:31
поделиться

Вы можете попробовать это http://www.pagecolumn.com/tool/regtest.htm

1
ответ дан 23 November 2019 в 22:31
поделиться

Написание reg exes с использованием нотации, например, PCRE, похоже на написание ассемблера: это нормально, если вы можете просто видеть соответствующие конечные автоматы в своей голове, но может очень быстро становится трудно поддерживать.

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

Более рефлексивный способ - использовать представления данных для генерации регулярных выражений на вашем языке программирования и иметь соответствующие абстракции для их построения. Введение Олина Шивера в его нотацию регулярных выражений схемы дает отличный обзор проблем, с которыми сталкиваются при проектировании этих представлений данных.

2
ответ дан 23 November 2019 в 22:31
поделиться

Я использую:

http://regexlib.com/RETester.aspx

Вы также можете попробовать Regex Hero (использует Silverlight):

http://regexhero.net/tester/

3
ответ дан 23 November 2019 в 22:31
поделиться

Есть отличный бесплатный инструмент, тренер Regex . Последняя версия доступна только для Windows; ее автор доктор Эдмунд Вайц прекратил поддержку версии для Linux, потому что ее скачали слишком мало людей, но на странице загрузки есть более старая версия для Linux.

11
ответ дан 23 November 2019 в 22:31
поделиться

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

13
ответ дан 23 November 2019 в 22:31
поделиться

В Perl 5.10, используйте 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", ...);
51
ответ дан 23 November 2019 в 22:31
поделиться

Я использую этот онлайн-инструмент для отладки моего регулярного выражения:

http://www.regextester.com/

Но да, это может ' t лучше RegexBuddy.

7
ответ дан 23 November 2019 в 22:31
поделиться

Когда Я застреваю на регулярном выражении и обычно обращаюсь к этому: https://regexr.com/

Идеально подходит для быстрого тестирования того, где что-то идет не так.

28
ответ дан 23 November 2019 в 22:31
поделиться

Я отлаживаю регулярные выражения собственными глазами. Поэтому я использую модификатор / x , пишу к ним комментарии и разбиваю их на части. Прочтите книгу Джеффри Фридла Mastering Regular Expressions , чтобы узнать, как разрабатывать быстрые и удобочитаемые регулярные выражения. Различные инструменты отладки регулярных выражений просто провоцируют программирование вуду.

6
ответ дан 23 November 2019 в 22:31
поделиться

Если я чувствую, что застрял, мне нравится идти назад и генерировать regex непосредственно из образца текста с помощью txt2re (хотя обычно я в конечном итоге настраиваю полученный regex вручную).

3
ответ дан 23 November 2019 в 22:31
поделиться

Я использую Kodos - Отладчик регулярных выражений Python:

Kodos - это утилита с графическим интерфейсом Python для создания, тестирования и отладки регулярных выражений для языка программирования Python. Kodos должен помочь любому разработчику эффективно и без усилий создавать регулярные выражения в Python. Поскольку реализация регулярных выражений в Python основана на стандарте PCRE, Kodos должен принести пользу разработчикам других языков программирования, которые также придерживаются стандарта PCRE (Perl, PHP и т.д.).

(...)

alt text

Работает на Linux, Unix, Windows, Mac.

19
ответ дан 23 November 2019 в 22:31
поделиться

Я часто использую pcretest - вряд ли «отладчик», но он работает только с текстовым SSH-соединением и анализирует именно тот диалект регулярных выражений, который мне нужен. : мой (C ++) код ссылается на libpcre, поэтому нет никаких трудностей с тонкими различиями в том, что волшебно, а что нет, и т. д.

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

2
ответ дан 23 November 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: