3

为什么这段 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++ 正则表达式库。

4

3 回答 3

3

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

于 2013-08-06T04:20:06.280 回答
0

我下载并编译了 libc++ 的最前沿版本,该"^( |\t)*"版本不再阻塞。所以我要把它归结为一个旧图书馆。

于 2013-08-06T04:25:19.730 回答
0

代码很好。regex 库大多未在您的 libc++ 版本中实现。最好的办法是使用其他库,如 boost 或 libc++ 的更新版本。

于 2013-08-06T04:06:34.223 回答