【发布时间】:2012-08-14 20:05:29
【问题描述】:
我想匹配所有以给定单词开头的行,比如 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 Compiler 4.0(基本上是 clang 3.1 SVN 的快照)。
【问题讨论】:
-
刚刚偶然发现这个问题...仅供参考,boost::regex(在 EMCAScript 模式下)匹配行首,即您的正则表达式可以工作。
-
嗯,只是稍微相关,但
$与 VS2013 中的\r\n不匹配——它需要\s*$或类似的匹配...
标签: c++ regex c++11 clang libc++