与Boost正则表达式区分大小写的部分匹配

时间:2009-04-15 10:47:31

标签: c++ regex boost

从以下代码中,我希望从相应的输入中获取此输出:

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;
}

2 个答案:

答案 0 :(得分:1)

使用regex_search代替regex_match

答案 1 :(得分:0)

您的正则表达式必须考虑子字符串“FOO”的开头和结尾处的字符。 我不确定,但“FOO *”可能会做到这一点

如果在文本输入的末尾找到了部分字符串,而不是开头,则

match_partial只会返回true。

  

部分匹配是匹配的   最后一个或多个字符   文本输入,但并不匹配所有   正则表达式(虽然它   如果有更多的投入,可能已经这样做了   可用的)

所以与“FOO”相匹配的FOOBAR会返回false。 正如另一个答案所示,使用regex.search将允许您更有效地搜索子字符串。