Maison >développement back-end >C++ >Comment puis-je faire correspondre tous les mots d'une chaîne à l'aide de std::regex de C ?
Faire correspondre plusieurs résultats avec std::regex
Cet article traite d'un scénario dans lequel un utilisateur tente de faire correspondre chaque mot d'une chaîne donnée en utilisant le moteur d'expression régulière de la bibliothèque standard C (std::regex). L'utilisateur utilise le modèle regex "(bS*b)" pour y parvenir, mais rencontre un comportement inattendu.
Le problème
Le modèle regex initial fourni, "( bS*b)", encapsule les mots délimités par des limites de mots (b) et des caractères autres que des espaces (S). Cependant, lorsqu'il est combiné avec la fonction regex_search, ce modèle ne parvient pas à prendre en compte plusieurs correspondances potentielles dans la chaîne d'entrée.
La solution
Pour résoudre ce problème, il est nécessaire de parcourir la chaîne d'entrée tout en appliquant continuellement regex_search. Cela garantit que toutes les correspondances peuvent être détectées et capturées. Le code modifié ci-dessous illustre cette approche :
{ 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 <p>Dans ce code révisé, un itérateur, searchStart, est initialisé au début de la chaîne d'entrée. La fonction regex_search est appelée de manière itérative, searchStart servant de position de départ de la recherche. Si une correspondance est trouvée, la correspondance est imprimée et searchStart est ajusté à la position suivant le texte correspondant. Ce processus se poursuit jusqu'à ce qu'aucune correspondance ne puisse être trouvée.</p>
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!