我遇到了tr1 :: regex(VS2008)的一個非常奇怪的問題,我找不出原因。爲什麼這個正則表達式模式(tr1 :: regex)異常?
微軟C++異常::在執行期間到達第四正則表達式定義當在柱的端部的代碼編譯很好,但會引發異常的std :: TR1在存儲器位置0x0012f5f4 :: regex_error ..
但是,我能看到的唯一區別(也許我是盲人)在第三和第四個之間是'NumberOfComponents'而不是'SchemeVersion'。起初我想也許兩個(第三和第四)都是錯誤的,第三個錯誤只是在第四個觸發。這似乎並非如此,因爲我移動了它們並在它們之間放置了多個其他正則表達式定義。有問題的行總是觸發異常。
沒有人有任何想法,爲什麼這條線
std::tr1::regex rxNumberOfComponents("\\NumberOfComponents:(\\s*\\d+){1}");
觸發異常,但
std::tr1::regex rxSchemeVersion("\\SchemeVersion:(\\s*\\d+){1}");
不?運行時是否只是搞亂了我?
感謝您閱讀本文並感謝您的寶貴意見。
牛逼
PS:我是完全確定的解決方案是很容易我打我的頭靠在最近的牆壁,甚至出了「愚蠢的問題」因果報應......
#include <regex>
int main(void)
{
std::tr1::regex rxSepFileIdent("Scanner Separation Configuration");
std::tr1::regex rxScannerNameIdent("\\ScannerName:((\\s*\\w+)+)");
std::tr1::regex rxSchemeVersion("\\SchemeVersion:(\\s*\\d+){1}");
std::tr1::regex rxNumberOfComponents("\\NumberOfComponents:(\\s*\\d+){1}");
std::tr1::regex rxConfigStartIdent("Configuration Start");
std::tr1::regex rxConfigEndIdent("Configuration End");
return 0;
}
如果將rxSchemeVersion行更改爲「NumberOfComponents」,會發生什麼情況? – 2010-03-02 02:41:49
'std :: tr1 :: regex_error'是相當通用的。什麼是錯誤代碼(捕獲異常爲(例如)'rerr'並打印'rerr.code()')?將結果與'std :: tr1 :: regex_constants :: error_type'常量(http://msdn.microsoft.com/en-us/library/bb982845(lightweight).aspx)進行比較以找出錯誤(s)你正在處理。 – outis 2010-03-02 02:42:39