使用libc regex库匹配“begin-of-line”(C 11)

前端之家收集整理的这篇文章主要介绍了使用libc regex库匹配“begin-of-line”(C 11)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要匹配从给定单词开始的所有行,说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接口将其放入多行模式.

所有这一切,如果有人可以指向不同的规范文本,我会考虑这是一个错误报告,并尽我所能来解决它​​.

猜你在找的C&C++相关文章