1

所以这是我的程序:

#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...

std::regex_match() 函数调用只是冻结了我的程序。经过 2 或 3 分钟后,它会引发错误:

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

那么有什么问题呢?

4

1 回答 1

2

看起来你的正则表达式太复杂了,需要很长时间才能处理。可能的原因是您似乎不了解+正则表达式中的含义。您似乎相信它用于连接或其他东西。实际上,它的意思是“前一个元素重复了一次或多次”,类似于*“重复零次或多次”的意思。放弃所有优点,程序就可以工作了。

于 2013-07-17T13:34:49.137 回答