Domanda

con la "base" si intende:Solo gli operatori "+" (->seguito..) e "|" (->o) sono necessari.

Prototipo:

preg_match_all(std::string pattern, std::string subject, std::vector<std::string> &matches)

Esempio Di Utilizzo:

std::vector<std::string> matches;
std::string pattern, subject;
subject = "Some text with a lots of foo foo and " +  char(255) + " again " + char(255);
pattern = "/" + char(255) + char(255) + "+|foo+/";
preg_match_all(pattern, subject, matches);

Le partite dovrebbero essere disponibili afterwardsa via matches[n].Qualcuno ha un suggerimento senza utilizzando boost e/o PCRE?Se non, come ho ottenuto questo realizzato con boost?

È stato utile?

Soluzione

Si potrebbe cumulativo qualcosa utilizzando std::string::trovare, facendo partite tramite un funtore, e spingendo i risultati su una stringa vettoriale.

Il modo in cui è realizzato in boost è probabilmente eccessivo per quello che si vuole, è prima necessario scomporre l'espressione in lexems e quindi compilare una macchina a stati per l'analisi del dato regexp.

Altri suggerimenti

Restituisce un vettore di tutte le partite di un indice che sono stati trovati all'.

std::vector<std::pair<std::string, unsigned int>> RegexPP::MatchAll(std::string pattern, std::string haystack) {
    std::vector<std::pair<std::string, unsigned int>> matches;

    std::regex p(pattern);

    std::sregex_iterator start(haystack.begin(), haystack.end(), p), end;

    for(; start != end; start++) {
        auto match = *start; // dereference the iterator to get the match_result
        matches.push_back(std::pair<std::string, unsigned int>(match.str(), match.position()));
    }

    return matches;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top