12

我想匹配以给定单词开头的所有行,比如 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 的快照)。

4

2 回答 2

6

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

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

于 2012-08-14T23:44:30.293 回答
1

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

于 2014-01-12T08:38:37.910 回答