8

在我使用过的每种编程语言中,正则表达式支持(如果存在)基本上是一个黑匣子:有一些函数,如match,scan等,它们接受一个表达式并返回一些东西——通常是一个字符串或一个数组——但是他们在做的时候不会报告他们在做什么

我想知道,在任何相当流行的编程语言中,是否有内置或库支持来匹配正则表达式并提供某种实时输出(例如,标准输出)来指示正在发生的事情。

更新:我很欣赏到目前为止的评论;但是,我不是在询问显示正则表达式本身结构的工具,这正是debuggex.comregexper.com所做的(虽然这很酷!)。我的意思是询问在将表达式应用于某些输入的部分提供信息。

这是一个假设的例子:假设我有表达式“(foo|bar|baz)”,我用字符串“baz”测试它;然后我正在描绘可能看起来像的输出......

testing "foo" - nope
testing "bar" - nope
testing "baz" - found match

显然它看起来不像那样。但你明白了。

4

4 回答 4

6

几个正则表达式库的编写方式使得您可以通过状态处理信息获取状态。特别是,Russ Cox 写了一篇关于正则表达式的文章,其中包括一些代码和一个用于逐个状态转换的 API:

http://swtch.com/~rsc/regexp/regexp1.html

本文中使用的代码已扩展为一个完整、简单的正则表达式库,该库似乎提供了类似于您所描述的逐步输出:

https://code.google.com/p/re1/

后来,代码更加完善,现在是一个完整的正则表达式库,由 Google 维护(并在内部使用):

https://code.google.com/p/re2/

编辑

如果DebugDFA在源代码中编译 re2 并设置为 true,您将在处理过程中逐个状态输出。但是,对于许多正则表达式,它可能与实际的正则表达式不对应 1-1,并且输出有点深奥。

于 2013-06-14T21:11:13.700 回答
4

Python 的正则表达式引擎确实提供了可见性,使用RE.debug 标志。您要求的是不同的东西(实时反馈),我很确定它不存在。我可以看到它被集成到 IDE 或增强的 python shell 中,例如ipython。在我看来,这将是一件有趣的事情并且非常有用。

于 2013-06-14T21:07:05.053 回答
2

正则表达式好友

虽然不是一种编程语言,但 JGSoft 的 RegexBuddy实用程序有一个内置的正则表达式调试器,它显示正则表达式引擎在应用于给定目标字符串时执行的每个步骤(包括每个回溯)。我使用这个工具来衡量和比较各种表达式的效率。它对于识别失控的表达式(即灾难性回溯)也非常方便。

于 2013-06-14T21:24:56.587 回答
1

这不是您所要求的确切答案,而是相关的。

如果您希望在评估字符串时使用回调进行某种任意计算(就像编译器在解析源代码时可能会生成抽象语法树一样),您可以在几乎任何流行的工具中使用解析和词法分析工具语言。其中许多使用正则表达式来定义它们将接受的语法,并且更适合处理复杂的语法(尽管对于您给出的示例来说绝对是矫枉过正)。

于 2013-06-14T21:19:34.060 回答