为什么正则表达式会被替换?

时间:2013-08-06 02:56:08

标签: c++ regex

为什么这段C ++代码会永远阻止?

string word = " a\n";
regex indent("^( |\t)*");
word = regex_replace(word, indent, "");

为什么这段C ++代码会很快终止?

string word = " a\n";
regex indent("^( |\t)+");
word = regex_replace(word, indent, "");

并再加一点,为什么这会很快终止?

string word = " a\n";
regex indent("^( |\t)+?");
word = regex_replace(word, indent, "");

我希望"^( |\t)+?""^( |\t)*"

相同

我正在使用libc ++和llvm以及标准的c ++ regex库。

3 个答案:

答案 0 :(得分:3)

我的猜测是^( |\t)*没有匹配(即*表示0或更多,因此它匹配一个空格,一个选项卡或空字符串)并且现有(坏)算法找不到任何内容输入字符串......永远。换句话说,您遇到了该正则表达式实现中的错误。

答案 1 :(得分:0)

代码很好。正则表达式库大多没有在您的libc ++版本中实现。最好的办法是使用另一个库,如boost或更新版本的libc ++。

答案 2 :(得分:0)

我下载并编译了libc ++的最新版本,"^( |\t)*"版本不再阻止。所以我要把它写到一个旧图书馆。