Regex 为什么不能用正则表达式来描述递归结构?

Regex 为什么不能用正则表达式来描述递归结构?,regex,recursion,Regex,Recursion,你能解释一下为什么不能用正则表达式来描述递归结构吗 乙二醇 A=*A?B 因为正则表达式(至少在正则语言的意义上)对应于有限状态机。您需要无限多的状态来跟踪任意级别的嵌套。因为正则表达式(至少在正则语言的意义上)对应于有限状态机。您需要无限多的状态来跟踪任意级别的嵌套。尽管正则表达式不能通过形式定义来表示递归,但对于某些语言,如Perl和Ruby,存在“regex” 对于python,还有一个标准库中没有的支持递归 但是同样,我们没有递归结构,所以形式上的正则表达式不能通过定义来表示递归结构。

你能解释一下为什么不能用正则表达式来描述递归结构吗

乙二醇

  • A=*A?B

  • 因为正则表达式(至少在正则语言的意义上)对应于有限状态机。您需要无限多的状态来跟踪任意级别的嵌套。

    因为正则表达式(至少在正则语言的意义上)对应于有限状态机。您需要无限多的状态来跟踪任意级别的嵌套。

    尽管正则表达式不能通过形式定义来表示递归,但对于某些语言,如Perl和Ruby,存在“regex”

    对于python,还有一个标准库中没有的支持递归


    但是同样,我们没有递归结构,所以形式上的正则表达式不能通过定义来表示递归结构。

    即使正则表达式不能通过形式上的定义来表示递归,对于一些语言,如Perl和Ruby,也有“regex”

    对于python,还有一个标准库中没有的支持递归


    但是同样,我们没有递归结构,所以形式上的正则表达式不能通过定义来表达递归结构。

    这是正则语言的形式定义的结果。仔细看@p.s.w.g!并非所有在“regex”标签下运行的语言都等同于常规语言,许多语言严格来说更强大。@delnann当问题被标记为“regex”并且没有特定于语言的问题时,
    p.s.w.g
    的陈述是适用的(并且在任何情况下都是完全准确的).这是正规语言正式定义的结果。仔细看@p.s.w.g!并非所有在“regex”标签下运行的语言都等同于常规语言,许多语言严格来说更强大。@delnann当问题被标记为“regex”并且没有特定于语言的问题时,
    p.s.w.g
    的陈述是适用的(并且在任何情况下都是完全准确的)。“regex”不再意味着“有限状态机”,除非你想和一半的编程人员打一场漫长而毫无结果的战争。即使回溯也会打破这种同构,更不用说其他扩展了。@delnan:我意识到;)但除非进一步限定,否则我假设“regex”意味着“常规语言”……我对这个假设有异议。根据我的经验,大多数人使用“regex”来表示“无论我的语言支持什么”,这在大多数情况下至少是回溯。“regex”不再是“有限状态机”的意思,除非你想与一半的编程人员打一场漫长而无果的战争。即使回溯也会打破这种同构,更不用说其他扩展了。@delnan:我意识到;)但除非进一步限定,否则我假设“regex”意味着“常规语言”……我对这个假设有异议。根据我的经验,大多数人使用“regex”来表示“无论我的语言支持什么”,这在大多数情况下至少是回溯。