原子分组交替是没用的?

我知道许多有关原子分组的伟大答案,例如,与原子分组混淆 - 它与Ruby的正则表达式中的分组有什么不同?

我的问题很简单: 原子分组交替是没用的,对吧?

一些例子:

  • a(?>bc|b)c永远不会匹配abc ,实际上它绝对不会尝试b中的()
  • (?>.*|b*)[ac]永远不会匹配任何字符串,因为.*匹配它们全部并被丢弃。
  • 我理解它吗?


    perl一些测试代码,以防万一它可能有帮助

    sub tester {
        my ($txt, $pat) = @_;
        if ($txt =~ $pat) {
            print "${pat} matches ${txt}n";
        } else {
            print "No matchn";
        }
    }
    
    $txt = "abcc";
    $pat = qr/a(?>bc|b)c/;
    tester($txt, $pat);
    
    $txt = "bbabbbabbbbc";
    $pat = qr/(?>.*)c/;
    tester($txt, $pat);
    
    $pat = qr/(?>.*|b*)[ac]/;
    tester($txt, $pat);
    
    $txt = "abadcc";
    $pat = qr/a(?>b|dc)c/;
    tester($txt, $pat);
    

    我在这里找到了一个解释,有点回答我的问题。

    它(原子分组)告诉RegEx引擎,一旦它找到了匹配的子模式,不会回溯任何量词或其他可能的内容。


    在一般情况下它并不是无用的。

    它在你的例子中不起作用,因为第一选择总是匹配的,因此第二选择不会被尝试。 引擎不会在原子组内回溯,因为这几乎是原子组的目的。

    如果你在一个原子组中有两个不相交的模式,那将是非常有意义的
    (类似于(?>ab|cd) )。

    链接地址: http://www.djcxy.com/p/74777.html

    上一篇: Alternation in atomic grouping is useless?

    下一篇: Atomic groups clarity