我遇到了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