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