Frage

mit "basic" ist gemeint: Es wird nur die Operatoren "+" (-> folgenden ..) und "|" (-> oder). Nötig sind, um

Vorbild:

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

Verwendungsbeispiel:

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

Die Spiele sollten zur Verfügung afterwardsa über matches[n] sein. Jemand bekam einen Hinweis ohne mit Auftrieb und / oder PCRE? Wenn nicht, wie kann ich dies mit Boost realisiert hat?

War es hilfreich?

Lösung

Sie könnten etwas mit std :: string :: find Rollup , Streichhölzer über einen Funktor tun, und die Ergebnisse auf ein String-Vektor drücken.

So wie es im Boost realisiert ist, ist wahrscheinlich übertrieben für das, was Sie wollen -. Sie würden zuerst den Ausdruck in Lexeme zersetzen müssen und dann eine Zustandsmaschine kompilieren für die gegebene regexp Parsen

Andere Tipps

Das wird wieder ein Vektor aller einen den Index übereinstimmt sie gefunden wurden.

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top