使用 libc++ 正则表达式库匹配"beginning-of-line" (C++11)



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

下面是一个示例:

#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的快照)。

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

话虽如此,如果有人可以指出我说法不同的规范性文本,我会认为这是一个错误报告并尽我所能修复它。

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