为什么这段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库。
答案 0 :(得分:3)
我的猜测是^( |\t)*
没有匹配(即*表示0或更多,因此它匹配一个空格,一个选项卡或空字符串)并且现有(坏)算法找不到任何内容输入字符串......永远。换句话说,您遇到了该正则表达式实现中的错误。
答案 1 :(得分:0)
代码很好。正则表达式库大多没有在您的libc ++版本中实现。最好的办法是使用另一个库,如boost或更新版本的libc ++。
答案 2 :(得分:0)
我下载并编译了libc ++的最新版本,"^( |\t)*"
版本不再阻止。所以我要把它写到一个旧图书馆。