澄清逻辑AND和OR与Boost的正则表达式匹配

时间:2013-11-22 00:49:27

标签: c++ regex windows boost

我需要使用正则表达式匹配两种类型的字符串:

//Look for "keyboard" AND "mouse"
(?=.*keyboard)(?=.*mouse)

//Look for "keyboard" OR "mouse"
(keyboard)|(mouse)

我使用Boost库运行此代码:

static const boost::regex e("(?=.*keyboard)(?=.*mouse)");
string chat_input("keyboard & mouse");
boost::match_results<std::string::const_iterator> results;
if (boost::regex_match(chat_input, results, e))
{
    //Got a match
}

两个正则表达式都返回no match。我使用了错误的语法吗?

1 个答案:

答案 0 :(得分:0)

默认情况下,

boost :: regex_match是完全匹配,因此您可以使用此正则表达式".*(keyboard|mouse).*"来匹配字符串。或者你可以再传递一个参数让它进行部分匹配。

boost::regex_match(chat_input, results, e, boost::match_default | boost::match_partial)

请参阅http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/boost_regex/ref/regex_match.html

“算法regex_match确定给定的正则表达式是否匹配由一对双向迭代器表示的给定字符序列的 all ,算法定义如下,此函数的主要用途是数据输入验证。“

http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/boost_regex/partial_matches.html