Maison >développement back-end >C++ >Comment puis-je extraire efficacement plusieurs mots d'une chaîne à l'aide de « std::regex » de C ?

Comment puis-je extraire efficacement plusieurs mots d'une chaîne à l'aide de « std::regex » de C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-15 08:17:16450parcourir

How Can I Efficiently Extract Multiple Words from a String Using C  's `std::regex`?

Faire correspondre plusieurs résultats avec std::regex

Faire correspondre plusieurs résultats à l'aide de std::regex peut être un moyen pratique d'extraire plusieurs morceaux de les données d’une chaîne en une seule opération. Cependant, l'expression régulière fournie "(bS*b){0,}" ne convient pas pour faire correspondre tous les mots de la chaîne "premier deuxième tiers".

Solution :

Le problème avec l'expression régulière d'origine est que le quantificateur {0,} correspond à zéro ou plusieurs fois, ce qui permet au modèle de correspondre à des chaînes vides. Au lieu de cela, un quantificateur qui correspond une ou plusieurs fois, tel que "{1,}" ou " ", doit être utilisé.

De plus, pour faire correspondre chaque mot de la chaîne, l'expression régulière doit être appliquée à plusieurs reprises. , en recherchant à chaque fois à partir de la position après le match précédent. Ceci peut être réalisé en utilisant une boucle avec regex_search itérant sur la chaîne.

Code révisé :

Voici un code révisé qui implémente les modifications nécessaires :

#include <iostream>
#include <string>
#include <regex>
using namespace std;

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

Ce code applique de manière itérative l'expression régulière à la chaîne et génère chaque mot correspondant séparé par des espaces. Le résultat sera :

first second third forth

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