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
Libérer: 2024-12-15 08:17:16
original
446 Les gens l'ont consulté

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;
}
Copier après la connexion

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
Copier après la connexion

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