gpt4 book ai didi

regex - Perl 6中的递归正则表达式?

转载 作者:行者123 更新时间:2023-12-04 03:14:21 25 4
gpt4 key购买 nike

我一直在尝试找出如何在Perl 6中执行递归正则表达式。对于一个玩具示例,一个平衡的括号匹配器将匹配((())())中的(((((())())

  • PCRE示例:/\((?R)?\)/
  • Onigmo示例:(?<paren>\(\g<paren>*\))

  • 我以为这样可以做到:
    my regex paren {
    '(' ~ ')' <paren>*
    }

    或更简单
    my regex paren {
    '(' <paren>* ')'
    }

    但这失败了
    No such method 'paren' for invocant of type 'Match'
    in regex paren at ...

    最佳答案

    您需要明确表明您正在调用my范围的正则表达式:

    my regex paren {
    '(' ~ ')' <&paren>*
    }

    请注意已添加的 &。接着就,随即:
    say "(()())" ~~ /^<&paren>$/    # 「(()())」
    say "(()()" ~~ /^<&paren>$/ # Nil

    的确,有时您可以不用显式地编写 &而逃脱,并且在使用时确实可以:
    say "(()())" ~~ /^<paren>$/    # 「(()())」
    say "(()()" ~~ /^<paren>$/ # Nil

    这仅是有效的,因为编译器会发现在词法范围内定义了一个名称为 paren的正则表达式,因此将 <paren>语法编译为该正则表达式。在递归的情况下,直到解析正则表达式后才安装该声明,因此需要明确声明。

    关于regex - Perl 6中的递归正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54940877/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com