regex - Perl 正则表达式图灵完备吗?

标签 regex perl turing-complete

我见过 Ruby 和 Perl 程序员做了一些complicated code challenges完全用正则表达式。 lookahead and lookbehind Perl 正则表达式中的功能使其比大多数其他语言中的正则表达式实现更强大。我想知道他们到底有多强大。

有没有一种简单的方法可以证明或反驳 Perl 正则表达式是 Turing complete

最佳答案

排除任何类型的嵌入式代码,例如 ?{ },它们可能无法涵盖所有​​上下文无关的内容,更不用说图灵机了。他们可能会这样做,但据我所知,没有人真正以这种或那种方式证明过这一点。鉴于人们一直在尝试使用 Perl 正则表达式解决某些上下文无关问题,但尚未找到解决方案,因此它们很可能不是上下文无关的。

关于哪些功能只是方便,哪些功能实际上增加了功能,有一个有趣的讨论。例如,匹配 0n*1*0n (这是“任意数量的零,后跟一个 1,后跟与之前相同数量的零”的表示法) ) 不是可以用纯正则表达式完成的事情。您可以使用泵引理证明这不能通过正则表达式来完成,但简单、非正式的证明是正则表达式必须计算任意数量的零,而正则表达式无法进行计数。

但是,反向引用可以与以下内容相匹配:

/(0*) 1 \1/x;

因此,这意味着反向引用可以为您提供更多功能,而不仅仅是一种便利。我想知道还有什么可以给我们更多的力量?

此外,Perl6“模式”(它们甚至不再假装它们是正则表达式)的设计看起来有点像 Perl5 正则表达式(因此您不需要重新学习太多),但它们添加了足够的功能完全与上下文无关。实际上,它们的设计目的是让您可以使用它们来改变词法范围内解析语言的方式。

关于regex - Perl 正则表达式图灵完备吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7983115/

相关文章:

html - 如何将文本中的 URL 转换为 HTML 链接?

branch - 条件分支是图灵完备性的要求吗?

language-agnostic - 这些程序可以存在于每一种图灵完备的语言中吗?

java - java中的正则表达式

regex - 在.BAT中使用正则表达式查找子字符串

php - 我的 sql 查询只返回完全匹配的字符串。有没有办法返回最近的匹配项?

ruby - 使用 ruby​​ xmpp4r 向离线 Google Talk 用户发送 XMPP 消息

javascript - 从脚本中的 var 中提取数据并使用 python 将 pdf 下载到文件夹

perl - 使用内联哈希定义Perl while()=每个{}循环

stack - 是否有一种编程语言仅具有确定性下推自动机的功能,而仅此而已?