使用libc ++ regex库匹配“行首”(C ++ 11)

时间:2012-08-14 20:05:30

标签: c++ regex c++11 clang libc++

我希望匹配以给定单词开头的所有行,比如iheap。如果我没有弄错,正则表达式(在ECMAScript语法中)"^iheap.*"应该可以解决问题。但是,当我使用libc ++的正则表达式库在C ++ 11中测试它时,只匹配第一行。所以"^..."似乎只匹配输入的开头而不是行首。

以下是一个例子:

#include <string>
#include <regex>
#include <iostream>

using namespace std;

int main() {
        regex rx("^iheap.*");
        string s = "iheap says hello.\niheap says hello again.\n";
        cout << s << regex_replace(s, rx, "IHEAP");
        return 0;
}

输出:

iheap says hello.
iheap says hello again.
IHEAP
iheap says hello again.

这是libc ++的错误还是我做错了什么?谢谢!

注意:我使用的是Mac OS X Mountain Lion和Apple LLVM Compiler 4.0(基本上是clang 3.1 SVN的快照)。

2 个答案:

答案 0 :(得分:5)

我已查看了所有相关标准,据我所知,^仅匹配字符串的开头,而不是换行符,除非引擎处于多行模式。默认引擎是ECMA-262默认情况下引擎不处于多行模式,我看不到使用std C ++接口将其置于多行模式。

所有这一切,如果有人能够指出我采用不同的规范性文本,我会认为这是一个错误报告,并尽我所能来解决它​​。

答案 1 :(得分:0)

此问题已在http://cplusplus.github.io/LWG/lwg-toc.html的2343列出。