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

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

DDD
Libérer: 2024-11-29 12:51:11
original
314 Les gens l'ont consulté

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

Faire correspondre plusieurs résultats avec std::regex

Faire correspondre plusieurs occurrences de mots dans une chaîne peut être difficile avec les expressions régulières. Bien que l'expression "(bS*b){0,}" semble correspondre à tous les mots consécutifs d'une chaîne, elle peut ne pas produire le résultat souhaité. Au lieu de cela, une approche itérative est recommandée.

Voici le code révisé :

#include <iostream>
#include <string>
#include <regex>

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;

    return 0;
}
Copier après la connexion

Dans ce code mis à jour, nous utilisons une boucle while pour parcourir la chaîne tout en effectuant des recherches d'expressions régulières. La boucle commence en définissant l’itérateur searchStart au début de la chaîne. Ensuite, au sein de chaque itération :

  1. La fonction regex_search recherche la première occurrence du modèle dans la sous-chaîne commençant à searchStart.
  2. Si une correspondance est trouvée, nous imprimons le mot correspondant .
  3. Nous mettons à jour l'itérateur searchStart pour commencer la recherche après le correspondant mot.

En parcourant la chaîne jusqu'à ce qu'aucune correspondance ne soit trouvée, nous pouvons afficher tous les mots un par un.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal