2013-08-06 26 views
3

爲什麼這塊C++代碼永遠阻塞?爲什麼正則表達式阻塞替換?

string word = " a\n"; 
regex indent("^(|\t)*"); 
word = regex_replace(word, indent, ""); 

爲什麼這段C++代碼快速終止?

string word = " a\n"; 
regex indent("^(|\t)+"); 
word = regex_replace(word, indent, ""); 

,並添加更多的扭曲爲什麼會發生這種迅速終止?

string word = " a\n"; 
regex indent("^(|\t)+?"); 
word = regex_replace(word, indent, ""); 

我預計"^(|\t)+?"將是相同"^(|\t)*"

我使用的libC++和LLVM和C++標準regex庫。

+0

最後我聽說libstdC++的''不完整。 [看到這個相關問題的答案。](http://stackoverflow.com/a/12665408/445976) – Blastfurnace

+0

使用boost正則表達式庫 – flyingfoxlee

回答

0

代碼很好。正則表達式庫大部分未在您的libC++版本中實現。您最好的選擇是使用另一個庫,如boost或libC++的更新版本。

+0

事實上,它在最新版本的libC++ –

3

我的猜測是^(|\t)*與什麼都不匹配(即*表示0或更多,因此它匹配一個空格,一個製表符或空字符串),而現有的(壞)算法在輸入字符串中找不到任何內容永遠......換句話說,你在那個正則表達式實現中遇到了一個錯誤。

0

我下載並編譯了libC++的最新版本,並且"^(|\t)*"版本不再阻塞。所以我會把它記入一箇舊圖書館。