我想要匹配从给定单词开始的所有行,说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的快照).
解决方法
我查看了所有相关的标准,据我所知,^只匹配字符串的开头,而不是换行,除非引擎处于多行模式.默认引擎为
ECMA-262默认情况下,引擎不是多行模式,我看不到使用std C接口将其放入多行模式.
所有这一切,如果有人可以指向不同的规范文本,我会考虑这是一个错误报告,并尽我所能来解决它.