我想匹配以给定单词开头的所有行,例如iheap。如果我没记错的话,用正则表达式(使用ECMAScript语法)"^iheap.*"应该可以解决问题。但是,当我使用libc++的regex库在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编译器4.0(基本上是clang 3.1 SVN的快照)。

最佳答案

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

话虽如此,如果有人可以将我指向具有不同含义的规范性文本,那么我将认为这是一个错误报告,并会尽力予以解决。

10-05 22:38