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
Libérer: 2024-12-11 08:54:09
original
770 Les gens l'ont consulté

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 << ( searchStart == str.cbegin() ? "" : " " ) << res[0];
        searchStart = res.suffix().first;
    }
    cout << endl;
}
Copier après la connexion

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.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal