我使用正则表达式伙伴,它接受一个正则表达式,然后给出它的含义,从中得到它可以做什么?在类似的行中,是否有可能有一些引擎采用自然语言输入来描述一个需要匹配/替换的模式,并为该描述给出正确(几乎正确)的正则表达式?
例如匹配某个文件中的整个单词“dio”
所以正则表达式可能是:<dio>
或
\bdio\b
-广告。
PS = 我认为这里很少有人会认为这是一个“主观”“与编程无关”的问题,但我仍然需要问这个问题。为了我自己。- 谢谢。
这将是复杂的编程,因为你需要一个能够推导出含义的自然语言解析器。除非你把它限制在一个严格的子集中——在这种情况下,你正在重新发明一种表达式语言,你最终会回到正则表达式——只有更大的符号。那么有什么好处呢?
正则表达式的开发是有原因的——它们是最简单、最准确的表示。
有一个用于 Emacs 的Symbolix Regular Expression Builder包,但是看着它,我认为正则表达式更容易使用。
简短的回答:不,直到人工智能改进了很多。
如果你写了这样的东西,你的语法就会非常有限。对于要知道“在某个文件中匹配整个单词'dio'”的人,他们基本上需要对正则表达式有重要的了解。此时,只需使用正则表达式。
对于非技术用户,除非您将其限制为基本的“查找此短语”或“查找以 ?? 开头/结尾的行”,否则这将永远不会起作用。他们永远不会想出这样的事情:
查找包含小于号后跟字符串“img”后跟一个或多个分组的行:一些空格,后跟一个或多个字母,后跟双引号字符串或单引号字符串,这些分组是后跟任意长度的空格,然后是斜杠和大于号。
这是我对这个相对简单的正则表达式的简单语言版本的尝试:
/<img(\s+[a-z]+=("[^"]*"|'[^']*'))+\s*/>/i
是的,我同意你的看法subjective
。但我会回答你的问题,因为我认为你问了一个错误的问题。
答案是“是”。几乎任何东西都可以编码,这将是一个相当简单的编码应用程序。它会完美运行吗?不,它不会,因为自然语言的解析和解释非常复杂。但是有可能写出这样一个有一些限制的引擎。
通过使用自然语言处理器生成正则表达式是很有可能的。Prolog 应该是解决这类问题的一个不错的语言选择。然而,在实践中,您实际上要做的是设计您自己的输入语言,该语言提供正则表达式作为输出。如果您的目标是为特定任务生成正则表达式,这实际上可能很有用。也许您正在执行的任务往往需要某些可行但未内置于正则表达式的公式。尽管这是否比一次只创建一个正则表达式更有效取决于您的项目。通常情况可能并非如此,因为您自己的语言不会像正则表达式那样广为人知或有充分的记录。如果您的目标是生成正则表达式的替代品,其输出将被解析为正则表达式,我认为您 问了很多。并不是说人们以前没有做过同样的事情(例如,C++ 语言作为最初在 C++ 上运行的“改进”)。
在http://www.rubyregexp.sf.net尝试开源 mac 应用程序 Ruby Regexp Machine 。它是用 ruby 编写的,因此即使您不在 mac 上也可以使用其中的一些代码。你可以用简单的英语语法描述很多简单的正则表达式。作为披露,我确实制作了这个工具。