2012-11-06 50 views
1

我试图在Ubuntu中使用C++和PCRE正则表达式。我安装了几乎所有相关的软件(libpcrepp和类似软件),但我甚至无法匹配最简单的表达式。我的代码,简化:PCRE忽略C++中的匹配

#include <iostream> 
#include <string> 
#include <pcrecpp.h> 

using namespace std; 

int main() { 

    std::string text, a, b; 

    text = "Flowers in the forest are darker than in the prairie"; 

    pcrecpp::RE re("forest"); 

    if(re.PartialMatch(text, &a, &b)) { 
     std::cout << "match: " << a << b << "\n"; 
    } 

} 

没有错误编译:

g++ t2.cpp -lpcrecpp -o t2 

也没有结果执行时。任何提示?提前致谢。

回答

1

re.PartialMatch(文本,&一个,& B)

如果有至少两个捕捉在正则表达式,一个用于每个的返回参数只能返回true。由于正则表达式(“森林”)中没有捕获,因此无论模式是否匹配文本,re.PartialMatch都会保证返回false。

+0

我删除了&B的离开表达: re.PartialMatch(文字,&A) 但它仍然没有工作。谢谢@rici。 – user1801983

+0

您也没有一个捕获组。你读过关于正则表达式的任何文档吗?捕获组是由'('和')'包围的正则表达式的一部分,匹配被“捕获”并返回。既然你没有这些,你所能做的只是找出匹配是否奏效(布尔返回结果)。如果你使用DoMatch,你也可以得到比赛的长度。 (详见pcrecpp.h)。 – rici

+0

由()包围的表达式有诀窍。感谢您的帮助,@rici。 – user1801983