今天我在我的應用程序中遇到了一個奇怪的錯誤。我已經測試了2小時,但沒有找到解決方案。也許你可以幫我解決這個問題。所以在這裏,它是:奇怪的錯誤 - std :: regex只匹配前兩個字符串
#include <iostream>
#include <regex>
#include <vector>
int main()
{
std::regex reg("rmvb|avi|rm|mp4|256");
std::vector<std::string> ext{"rmvb", "avi", "rm", "mp4", "256", "null"};
for (int i = 0; i < 6; i++)
{
std::cout << ext[i] << "\t" << std::boolalpha << std::regex_match(ext[i], reg) << std::endl;
}
return 0;
}
輸出:
rmvb true
avi true
rm false
mp4 false
256 false
null false
看來,圖案是第二個元素後丟棄 - 不管我選擇什麼樣的順序(我試圖交換它們,因爲我認爲數字可以導致這個錯誤 - 但他們不是)。現在我不知道發生了什麼事。
我使用的是gcc版本4.6.3(Debian 4.6.3-1)。
在我的gcc 4.6.2上,我甚至無法正確編譯代碼。 'std :: regex'是TR1的一部分,所以它應該是'#include','std :: tr1 :: regex'和'std :: tr1 :: regex_match'。一旦出現這種情況,它不會鏈接:當使用'g ++ - 4.6.2 -std ='時,我從http://stackoverflow.com/questions/2860722/linker-error-when-using-tr1regex得到錯誤。 C++ 0x foo.cc'。你能否提供一些關於代碼如何在你的環境中運行的更多細節? –
Borealid
2012-03-19 02:37:20
P.S.問題幾乎肯定是矢量初始化器。我不太瞭解C++ 0x來說明你寫的代碼的作用,但這是可疑的部分。也許你應該嘗試用傳統的方式來構建這個載體,看看它是否能夠工作? – Borealid 2012-03-19 02:40:02
@Borealid:沒關係。當用'-std = C++ 0x'編譯時,'std :: regex'確實存在於''中。矢量初始化器也可以(請參閱它如何正確打印內容)。 –
2012-03-19 02:42:06