2010-11-11 96 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

相關問題