\s++意味着占有地匹配一个或多个空白字符.
这和写作一样(?>\s+).额外的加号使它具有占有欲,就像一个独立的子群.
这说明了不同之处:
% perl -Mre=debug -le 'print (("a " . " " x 300 . "x") =~ /a\s+\d/ || 0)' | & wc -l
621
% perl -Mre=debug -le 'print (("a " . " " x 300 . "x") =~ /a\s++\d/ || 0)' | & wc -l
26
Run Code Online (Sandbox Code Playgroud)
我正在计算正则表达式引擎解决匹配所需的步数.虽然没有匹配,但它不知道.它在第一种情况下尝试了一堆真正的愚蠢的东西,占有式匹配阻止它在第二种情况下尝试.一旦进行了占有式匹配,就无法回溯并重新计算.