【发布时间】:2016-04-04 22:28:55
【问题描述】:
我知道许多关于原子分组的好答案,例如,Confusion with Atomic Grouping - how it differs from the Grouping in regular expression of 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 match\n";
}
}
$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);
我在here 中找到了一个解释,可以回答我的问题。
它(原子分组)告诉 RegEx 引擎,一旦它找到匹配的子模式,就不要回溯任何可能在其中的量词或替代项。
【问题讨论】: