/ / Regex und Boost. Nicht an einem einfachen Regex arbeiten - C ++, Boost-Regex

Regex und Boost. Nicht an einem einfachen Regex arbeiten - C ++, Boost-Regex

Unten ist mein folgender Code

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

Es wird immer ohne Übereinstimmungen ausgegeben.

Ich bin sicher, dass Regex funktionieren sollte.

Ich habe dieses Beispiel benutzt

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

Antworten:

3 für die Antwort № 1

von Lade Regex:

Wichtig

Beachten Sie, dass das Ergebnis nur dann wahr ist, wenn derAusdruck stimmt mit der gesamten Eingabesequenz überein. Wenn Sie innerhalb der Sequenz nach einem Ausdruck suchen möchten, verwenden Sie regex_search. Wenn Sie ein Präfix der Zeichenkette abgleichen möchten, verwenden Sie regex_search mit dem Flag match_continuous set.


0 für die Antwort № 2

Versuchen boost::regex re("(.*)name(.*)"); wenn Sie den Ausdruck mit verwenden möchten regex_match.