【问题标题】:PCRE ignoring matches in c++PCRE忽略C++中的匹配
【发布时间】:2012-11-06 04:42:15
【问题描述】:

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

#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

执行时没有结果。有什么提示吗?提前致谢。

【问题讨论】:

    标签: c++ regex pcre


    【解决方案1】:

    re.PartialMatch(文本, &a, &b)

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

    【讨论】:

    • 我删除了 &b 留下了表达式:re.PartialMatch(text, &a) 但它仍然无法正常工作。谢谢你,@rici。
    • 您也没有一个捕获组。您是否阅读过任何有关正则表达式的文档?捕获组是由() 包围的正则表达式的一部分,其匹配被“捕获”然后返回。由于您没有这些,您所能做的就是找出匹配是否有效(布尔返回结果)。如果使用 DoMatch,还可以得到匹配的长度。 (详见pcrecpp.h)。
    • 用 ( ) 包围的表达式起到了作用。感谢您的帮助,@rici。
    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    相关资源
    最近更新 更多