Regex и Boost.Не работает над простым регулярным выражением - PullRequest
0 голосов
/ 15 ноября 2010

Ниже мой следующий код

#include <iostream>
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
using namespace std;
using namespace boost;

int main() {

    std::string s = "Hello my name is bob";
    boost::regex re("name");
    boost::cmatch matches;

    try{

        // if (boost::regex_match(s.begin(), s.end(), re))
        if (boost::regex_match(s.c_str(), matches, re)){

            cout << matches.size();

            // matches[0] contains the original string.  matches[n]
            // contains a sub_match object for each matching
            // subexpression
            for (int i = 1; i < matches.size(); i++){
                // sub_match::first and sub_match::second are iterators that
                // refer to the first and one past the last chars of the
                // matching subexpression
                string match(matches[i].first, matches[i].second);
                cout << "\tmatches[" << i << "] = " << match << endl;
            }
        }
        else{
            cout << "No Matches(" << matches.size() << ")\n";
        }
    }
    catch (boost::regex_error& e){
        cout << "Error: " << e.what() << "\n";
    }
}

Всегда выводит без совпадений.

Я уверен, что регулярное выражение должно работать.

Я использовал этот пример

http://onlamp.com/pub/a/onlamp/2006/04/06/boostregex.html?page=3

Ответы [ 2 ]

3 голосов
/ 15 ноября 2010

из boost regex :

Важно

Обратите внимание, что результат верен, только если выражение соответствует всей входной последовательности.Если вы хотите найти выражение где-то в последовательности, используйте regex_search.Если вы хотите сопоставить префикс строки символов, используйте regex_search с установленным флагом match_continuous.

0 голосов
/ 15 ноября 2010

Попробуйте boost::regex re("(.*)name(.*)");, если хотите использовать выражение с regex_match.

...