Faire correspondre plusieurs résultats avec std::regex
Faire correspondre plusieurs occurrences de mots dans une chaîne peut être difficile avec les expressions régulières. Bien que l'expression "(bS*b){0,}" semble correspondre à tous les mots consécutifs d'une chaîne, elle peut ne pas produire le résultat souhaité. Au lieu de cela, une approche itérative est recommandée.
Voici le code révisé :
#include <iostream> #include <string> #include <regex> int main() { regex exp("(\b\S*\b)"); smatch res; string str = "first second third forth"; string::const_iterator searchStart(str.cbegin()); while (regex_search(searchStart, str.cend(), res, exp)) { cout << (searchStart == str.cbegin() ? "" : " ") << res[0]; searchStart = res.suffix().first; } cout << endl; return 0; }
Dans ce code mis à jour, nous utilisons une boucle while pour parcourir la chaîne tout en effectuant des recherches d'expressions régulières. La boucle commence en définissant l’itérateur searchStart au début de la chaîne. Ensuite, au sein de chaque itération :
En parcourant la chaîne jusqu'à ce qu'aucune correspondance ne soit trouvée, nous pouvons afficher tous les mots un par un.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!