有没有人试图描述与正则表达式匹配的正则表达式?
由于重复的关键字,这个主题在网上几乎是不可能找到的。
在实际应用程序中,它可能是不可用的,因为支持正则表达式的语言通常有一种解析它们的方法,我们可以用来验证它们,还有一种在代码中划分正则表达式的方法,这些方法可以用于搜索目的。
,但我仍然在想,匹配所有正则表达式的正则表达式会是什么样的呢?应该可以编写一个.。
发布于 2014-04-18 21:05:23
我没有这方面的正式证据,但我强烈怀疑正则表达式的语言本身并不是正则的,因此不受正则表达式的约束。这将使正确的正则表达式不可能表示出来。
为什么?可以看出,一种需要平衡括号的语言,如Lisp (或,更出名,是不正规的使用抽水引理。 )
证明平衡(即适当嵌套的)括号的语言不一定遵循同样的观点。给定p,有一串平衡括号,开始于p左括号,所以y将完全由左括号组成。通过重复y,我们可以生成一个字符串,该字符串不包含相同数量的左括号和右括号,因此它们不能平衡。
正则表达式允许嵌套捕获组,似乎属于这一类别:
以上一课中的例子为例,如果我们想要捕获图像文件号和文件名,我可以编写表达式
^(IMG(\d+))\.png$。
无论如何,对于计算机科学栈交换站点来说,这可能是一个更好的问题。
编辑:
tomp指出,基于PCRE的正则表达式引擎(可能还有其他引擎) 实际上能够匹配所有上下文无关文法和至少一些上下文敏感语法。!这代表了表达能力上的巨大差异。假设这篇文章是正确的,相当酷!
(当然,这些扩展实现是否仍然是“正则表达式”还有待讨论。因为我们在一个编程网站上,我将采取他们的立场。在CS网站上,我可能会采取相反的立场!)
因此,从技术上讲,将正则表达式表示为正则表达式是可能的。
即便如此,编写表示所有regex的regex的任务仍然非常复杂。考虑比较验证电子邮件地址的任务。许多资源将其归结为类似于[^@]+@[^@]+的东西,或者“只要在符号上只有一个字符,在符号之前至少有一个字符,在后面至少有一个字符,我们就很好”。
但是看看这个明显的完成验证RFC 822的正则表达式。这是正确的吗?谁知道呢。我肯定不会检查的。
看到这些之后,我不想尝试编写正则表达式来验证正则表达式。
发布于 2014-04-18 21:12:27
我只是在几分钟内编写了这个代码,所以不要期望太过much...still,它可以匹配字符串中的正则表达式。
^([igsmx]{1,})?\/(?=.*?(\\w|\\d|\[.*?\]|\(.*?\))).*?\/([igsmx]{1,})?$它可以扩展,看上去.
https://stackoverflow.com/questions/23162184
复制相似问题