是否有任何正则表达式引擎可以提供他们正在做的事情的可见性?

时间:2013-06-14 20:46:03

标签: regex

在我使用的每种编程语言中,正则表达式支持(如果存在)基本上是一个黑盒子:有一些函数,如matchscan等,它们采用表达式并返回某些东西 - 一个字符串或一个数组 - 但他们没有报告他们在做什么时正在做什么

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

更新:我很感谢到目前为止的评论;但是,我不是要问一个显示正则表达式结构的工具的工具,这就是debuggex.comregexper.com似乎做的事情(虽然这很酷! )。我的意思是询问在表达式应用于某些输入的部分中提供信息。

这是一个假设的例子:假设我有“(foo | bar | baz)”的表达式,我对字符串“baz”进行测试;然后我想象的输出可能看起来像......

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

显然它不会那样;但是你明白了。

4 个答案:

答案 0 :(得分:6)

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

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

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

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

后来,代码更加完善,现在是谷歌维护(并在内部使用)的完整版本的正则表达式库:

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

修改

如果在源代码中将DebugDFA设置为true编译re2,则在处理期间将获得状态输出。然而,对于许多正则表达式而言,它可能与实际的正则表达式不对应1-1,并且输出有点深奥。

答案 1 :(得分:4)

Python的正则表达式引擎does provide visibility,使用RE.debug flag。你要求的是一些不同的东西(实时反馈)我很确定不存在。我可以看到它被集成到IDE或增强的python shell中,例如ipython。在我看来,这是一个有趣的写作和非常有用的东西。

答案 2 :(得分:2)

使用RegexBuddy

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

答案 3 :(得分:1)

这不是你要问的确切答案,而是相关的。

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