Я столкнулся с очень странной проблемой с tr1 :: regex (VS2008), из-за которой я не могу понять причину. Код в конце поста отлично компилируется, но генерирует исключение при достижении 4-го регулярного определения выражений во время выполнения:Почему исключение из этого шаблона регулярного выражения (tr1 :: regex)?
исключенияMicrosoft C++: станд :: tr1 :: regex_error в ячейке памяти 0x0012f5f4 ..
Однако единственная разница, которую я вижу (может быть, я слепой) между 3-м и 4-м, - это «NumberOfComponents» вместо «SchemeVersion». Сначала я подумал, что, возможно, и то, и другое (3-е и 4-е) ошибочны, а ошибка с 3-го только что началась в 4-м. Кажется, это не так, поскольку я переместил их обоих и поместил несколько других определений регулярных выражений между ними. Строка, о которой идет речь, всегда вызывает исключение.
Кто-нибудь есть идеи, почему эта линия
std::tr1::regex rxNumberOfComponents("\\NumberOfComponents:(\\s*\\d+){1}");
вызывает исключение, но
std::tr1::regex rxSchemeVersion("\\SchemeVersion:(\\s*\\d+){1}");
не? Является ли время выполнения просто возиться со мной?
Спасибо за время, чтобы прочитать это и получить любую информацию.
T
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»? –
'std :: tr1 :: regex_error' довольно общий. Каков код ошибки (выведите исключение как (например,) 'rerr' и напечатайте' rerr.code() ')? Сравните результат с константами 'std :: tr1 :: regex_constants :: error_type' (http://msdn.microsoft.com/en-us/library/bb982845(lightweight).aspx), чтобы выяснить, какие ошибки (-ы) вы имеете дело с. – outis