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 ?

Comment puis-je faire correspondre tous les mots d'une chaîne à l'aide de std::regex de C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-11 08:54:09874parcourir

How Can I Match All Words in a String Using C  's std::regex?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn