Boost Regex 提供空白捕获

Posted

技术标签:

【中文标题】Boost Regex 提供空白捕获【英文标题】:Boost Regex Giving Blank Capture 【发布时间】:2014-03-12 11:04:32 【问题描述】:

我正在尝试使用 boost regex 库匹配 XXX >|=| 形式的字符串。我下面的代码显示我正在尝试匹配“x.y

boost::regex e("(.+?) *(>=|<=|==|>|<) *(.+)");
boost::smatch what;
if (boost::regex_match(std::string("x.y<123"), what, e)) 
    for (int i = 0; i < what.size(); ++ i)
        std::cout << std::string(what[i]) << std::endl;

else
    std::cout << "Fail matching" << std::endl;

【问题讨论】:

您的正则表达式看起来不错,但您是否使用了匹配函数的最后一个参数match_flag_type 默认行为可以解释为什么您没有得到“ @alexbuisson:我使用默认行为获得了相同的结果。 【参考方案1】:

匹配结果引用回被搜索的字符串。由于你的是临时的,结果是不确定的。

if (boost::regex_match(std::string("x.y<123"), what, e))  // bad


std::string s("x.y<123");
if (boost::regex_match(s, what, e))  // good

【讨论】:

+1,胜过元字符的阴谋 :) 不错,没想到!非常感谢。 @CasimiretHippolyte 我讨厌正则表达式语法。永远不要记住 (\( 在本月的味道中是什么意思。

以上是关于Boost Regex 提供空白捕获的主要内容,如果未能解决你的问题,请参考以下文章

C++ Boost Regex 不保存捕获

有没有办法让 Regex.Match 只提供预期的捕获组?

在 C++ 中使用 boost:regex_error 时未定义符号?

不需要boost::regex库的能进行正则表达式的代码?

从 Grep RegEx 中捕获组

在阻塞 boost c++ 方法中,如何在 Python 中捕获中断信号?