构建正则表达式

时间:2009-03-12 18:03:59

标签: regex theory

我使用正则表达式伙伴,它接受一个正则表达式,然后给出它的含义,从中得到它可以做什么?在类似的路线上,是否有可能有一些引擎采用自然语言输入来描述需要匹配/替换的模式,并为该描述提供正确的(几乎正确的)正则表达式?

e.g。匹配某个文件中的'dio'这个词

因此正则表达式可以是:<dio>

\ bdio \ B'/ P>

-AD。

P.S。我认为这里很少有人会认为这是一个“主观的”“与节目无关”的问题,但我只需要问这个问题。为了我自己。 - 谢谢。

5 个答案:

答案 0 :(得分:2)

编程会很复杂,因为你需要一个能够推导出意义的自然语言解析器。除非你把它限制在一个严格的子集 - 在这种情况下,你重新发明了一种表达式语言,你最终会回到正则表达式 - 只有更大的符号。那么收益是多少?

正在开发正则表达式是出于某种原因 - 它们是最简单,最准确的表示。

Emacs有一个Symbolix Regular Expression Builder包,但看看它,我认为正则表达式更容易使用。

答案 1 :(得分:1)

简短回答:不,直到人工智能改善很多。

如果你写了这样的东西,你的语法非常有限。对于有人知道“在某个文件中匹配整个单词'dio'”,他们基本上需要具备正则表达式的重要知识。那时,只需使用正则表达式。

对于非技术用户,除非您将其限制为基本的“查找此短语”,或者可能“查找以??开头/结尾的行”,否则这将永远不会有效。他们永远不会想出这样的东西:

查找包含小于号的行,后跟字符串'img',后跟一个或多个分组:一些空格后跟一个或多个字母,后跟双引号字符串或单引号字符串,以及这些分组后跟任意长度的空格,然后是斜线和大于号。

这是我对这个相对简单的正则表达式的简单语言版本的尝试:

/<img(\s+[a-z]+=("[^"]*"|'[^']*'))+\s*/>/i

答案 2 :(得分:0)

是的,我同意你的看法是subjective。但我会回答你的问题,因为我认为你提出了一个错误的问题。

答案是“”。几乎任何东西都可以编码,这将是一个相当简单的代码应用程序。它会完美运作吗?不,它不会因为解析和解释自然语言非常复杂。但是有可能用一些限制来编写这样的引擎。

答案 3 :(得分:0)

通过使用自然语言处理器生成正则表达式是非常有可能的。对于这类问题,Prolog应该是一个很好的语言选择。然而,在实践中,您实际上正在做的是设计自己的输入语言,它提供正则表达式作为输出。如果您的目标是为特定任务生成正则表达式,那么这可能实际上很有用。也许你正在做的任务往往需要某些可行但不能构建到正则表达式中的公式。虽然这是否比仅仅创建一个正则表达式更有效取决于您的项目。通常情况可能并非如此,因为您自己的语言不会像正则表达式那样众所周知或记录良好。如果您的目标是生成正则表达式的替代品,其输出将被解析为正则表达式,我想你会问很多。并不是说人们之前没有做过同样的事情(比如C ++语言作为'改进',最初在C ++上运行)。

答案 4 :(得分:0)

http://www.rubyregexp.sf.net尝试开源mac应用程序Ruby Regexp Machine。它是用ruby编写的,所以即使你不在mac上也可以使用一些代码。您可以用简单的英语语法描述很多简单的常规表达。作为披露,我确实制作了这个工具。