2010-11-11 117 views
1

我见过\ s ++,但我不确定它是什么意思。你能用一个例子吗? (\ s表示空格) s ++正则表达式

+1

正如你可以在答案和评论中看到的那样:如果你提供了这个问题所涉及的特定的正则表达式引擎,这将是一件好事。 – musiKk 2010-11-11 08:53:18

回答

6

\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 

我数正则表达式引擎多少步需要解决比赛。虽然没有匹配,但它不知道。它在第一种情况下尝试了一堆真正愚蠢的东西,即所有格匹配阻止它在第二种情况下尝试。一旦所有格匹配完成,它就不能被回溯并重新计算。

+0

您可能想要添加的只有Java,Perl(较新版本),PCRE(PHP的preg引擎等)以及JGSoft引擎支持所有格量​​词。所有这些,以及.NET和Ruby也支持原子组''(?> ...)',所以使用它们的正则表达式更具可移植性。 – 2010-11-11 09:02:23

+0

@Tim:我想,既然他在代码中发现它运行find,那不是一个可移植性的东西,它只是不知道它在那种语言中的含义。我不了解'++'的任何其他含义。 – tchrist 2010-11-13 10:53:17