Edit8:我首先为可能遇到同样问题的任何人发布了解决方案。
解决方案:
用 = 分配正则表达式,而不是调用 () 运算符。工作得很好。那是愚蠢的。
#include <iostream>
#include <string>
#include <boost/xpressive/xpressive_dynamic.hpp>
int main()
{
std::string str = "foobarfoo";
boost::xpressive::sregex rex;
std::string rstr = "foo";
rex = boost::xpressive::sregex::compile(rstr, boost::xpressive::regex_constants::ECMAScript);
if (boost::xpressive::regex_search(str, rex, boost::xpressive::regex_constants::match_continuous))
std::cout << "Match found.";
else
std::cout << "No match found.";
return 0;
}
原始问题:
我已经与 xpressive 斗争了一段时间,但我还没有做任何事情。使用以下代码:
#include <iostream>
#include <string>
#include <boost/xpressive/xpressive_dynamic.hpp>
int main()
{
std::string str = "foobar";
boost::xpressive::sregex rex;
std::string rstr = "foo";
rex(boost::xpressive::sregex::compile(rstr));
if (boost::xpressive::regex_match(str, rex))
std::cout << "Match found.";
else
std::cout << "No match found.";
return 0;
}
我没有找到我期望的匹配。帮助将不胜感激。
编辑:尝试将正则表达式编译行更改为
rex(boost::xpressive::sregex::compile(rstr, boost::xpressive::regex_constants::ECMAScript));
依然没有。
Edit2:使用 MinGW GCC 4.7 编译
Edit3:我还尝试将声明正则表达式字符串的行更改为
std::string rstr = ".*";
和
std::string rstr = "(.*)";
依然没有。
Edit4:我没有得到以下结果,仍然没有结果:
#include <iostream>
#include <string>
#include <boost/xpressive/xpressive_dynamic.hpp>
int main()
{
std::string str = "foobarfoo";
boost::xpressive::sregex rex;
std::string rstr = "(foo)";
rex(boost::xpressive::sregex::compile(rstr));//;, boost::xpressive::regex_constants::ECMAScript));
if (boost::xpressive::regex_search(str, rex, boost::xpressive::regex_constants::match_default))
std::cout << "Match found.";
else
std::cout << "No match found.";
return 0;
}
Edit5:我期待此时有两个匹配项,即 str 开头和结尾处的“foo”。
Edit6:尝试使用设置了 match_continuous 标志运行 regex_search 希望我至少可以让它获取前缀。没有骰子。还尝试使用 ECMAScript 标志进行编译,并使用 match_default 和 match_continuous 标志运行 regex_search。
Edit7:我知道 strstr() 会在这里工作。这是因为这是一个简单的示例案例。Boost 在实际应用中是必不可少的。