2013-07-17 3 views
0

Так вот моя программа:станд :: алгоритма regex_match() замерзает моя программа

#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <regex> 
#include <windows.h> 

using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    string str = "<link rel=\"shortcut icon\" href=\"http://joyvy.com/img/favicon.png\" />"; 
    regex expr("<link rel=+(\"|')+shortcut+(.*?(\"|'))+(.*?)href=(\"|')+(.*?)+(\"|')"); 
    smatch matches; 

    cout << "start..." << endl; 
    regex_match(str, matches, expr); 
    cout << "this will not be printed"; 
} 

А вот выход моей программы:

start... 

БППП :: алгоритма regex_match вызова() функция просто замораживает мою программу. По истечении 2 или 3 минут он запускает ошибку:

Unhandled exception at at 0x7515B760 in regex.exe: Microsoft C++ exception: std::regex_error at memory location 0x001D9088. 

Так что не так?

ответ

2

Похоже, что ваше регулярное выражение просто слишком сложное и требует вечной обработки. И вероятная причина этого в том, что вы, похоже, не понимаете, что означает + в регулярном выражении. Кажется, вы полагаете, что он используется для конкатенации или чего-то еще. Фактически это означает «предыдущий элемент повторяется один или несколько раз», аналогично *, что означает «повторяется ноль или более раз». Отбросьте все плюсы, и программа работает.

+0

Да, вы были правы. Благодаря! – Alexandr

Смежные вопросы