从以下代码中,我希望从相应的输入中获取此输出:
Input: FOO Output: Match
Input: FOOBAR Output: Match
Input: BAR Output: No Match
Input: fOOBar Output: No Match
但为什么它为输入FOOBAR提供“No Match”?
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <boost/regex.hpp>
using namespace std;
using namespace boost;
int main ( int arg_count, char *arg_vec[] ) {
if (arg_count !=2 ) {
cerr << "expected one argument" << endl;
return EXIT_FAILURE;
}
string InputString = arg_vec[1];
string toMatch = "FOO";
const regex e(toMatch);
if (regex_match(InputString, e,match_partial)) {
cout << "Match" << endl;
} else {
cout << "No Match" << endl;
}
return 0;
}
更新
最后,它使用以下方法:
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <boost/regex.hpp>
using namespace std;
using namespace boost;
bool testSearchBool(const boost::regex &ex, const string st) {
cout << "Searching " << st << endl;
string::const_iterator start, end;
start = st.begin();
end = st.end();
boost::match_results<std::string::const_iterator> what;
boost::match_flag_type flags = boost::match_default;
return boost::regex_search(start, end, what, ex, flags);
}
int main ( int arg_count, char *arg_vec[] ) {
if (arg_count !=2 ) {
cerr << "expected one argument" << endl;
return EXIT_FAILURE;
}
string InputString = arg_vec[1];
string toMatch = "FOO*";
static const regex e(toMatch);
if ( testSearchBool(e,InputString) ) {
cout << "MATCH" << endl;
}
else {
cout << "NOMATCH" << endl;
}
return 0;
}
答案 0 :(得分:1)
使用regex_search
代替regex_match
。
答案 1 :(得分:0)
您的正则表达式必须考虑子字符串“FOO”的开头和结尾处的字符。 我不确定,但“FOO *”可能会做到这一点
如果在文本输入的末尾找到了部分字符串,而不是开头,则match_partial只会返回true。
部分匹配是匹配的 最后一个或多个字符 文本输入,但并不匹配所有 正则表达式(虽然它 如果有更多的投入,可能已经这样做了 可用的)
所以与“FOO”相匹配的FOOBAR会返回false。 正如另一个答案所示,使用regex.search将允许您更有效地搜索子字符串。