现代正则表达方言不规律吗?

Dav*_*one 18 regex regular-language

我在这里看到一些评论,提到现代正则表达式超出了常规语言的表达范围.这是怎么回事?

现代正则表达式的哪些特征不规则?例子会有所帮助.

Nul*_*ion 19

首先想到的是反向引用:

(\w*)\s\1
Run Code Online (Sandbox Code Playgroud)

(匹配一组单词字符,后跟空格字符,然后匹配先前匹配的相同组)例如:hello hello匹配,hello world不匹配.

此构造不是常规的(即:不能通过常规语法生成).


Perl兼容RegExp(PCRE)支持的另一个非常规功能是递归模式:

\((a*|(?R))*\)
Run Code Online (Sandbox Code Playgroud)

这可用于匹配平衡括号和"a"的任意组合(来自维基百科)

  • 一些反向引用可以用常规语言进行.例如`(.)x\1`定义了一种常规语言:"axa","bxb"等.我相信只有当与Kleene闭包相结合时,反向引用才会使语言不规则. (2认同)