0
votes

Obtenir des itérateurs de STD :: Regex_Search et utilisez-les dans String :: Remplacer

J'ai des difficultés ridicules correspondant à une regex et remplaçant le match avec une autre chaîne. Je veux y parvenir avec des itérateurs, comme indiqué ci-dessous. La partie qui ne fonctionne pas est d'obtenir des itérateurs qui délimitent la correspondance dans la chaîne d'origine et que je pouvais ensuite passer à la chaîne :: Remplacer. J'ai essayé d'utiliser un objet STD :: Match_Results pour obtenir une paire d'itérateurs, mais remplacer m par MR dans l'appel de Regex_search échoue.

J'ai le sentiment vague Que j'utilise la mauvaise classe de match ou le mauvais type d'itérateur, mais d'une manière ou d'une autre, vous ne pouvez pas trouver mon moyen de sortir de la jungle de modèle. xxx


1 commentaires

Fonctionne intelligente avec site


3 Réponses :


1
votes

Essayez ce segment xxx


Utilisation typique dans tandis que la boucle xxx


1 commentaires

Merci, cela m'a donné la bonne idée. m [0] .Pritst serait le début et m [0] .seconde l'extrémité itérative.



0
votes

Pourquoi voulez-vous remplacer par des itérateurs? Vous savez peut-être cela, mais il y a std :: regex_replace méthode qui pourrait faire cela. XXX

Un autre échantillon similaire à partir d'un tutoriel de regex à l'aide de Regex_replace (faites défiler un bit)

Il est possible d'utiliser des itérateurs, mais vous besoin de créer une nouvelle chaîne de courant. Si vous voulez, je peux faire un échantillon.


0 commentaires

0
votes

Grâce à @edward, j'ai réalisé que m [0] contient une paire d'itérateurs qui définissent la sous-chaîne correspondante. J'avais essayé première et seconde mais sur m au lieu de m [0], ce qui a bien sûr échoué.

avec ce remplacement était facile: xxx


1 commentaires

Et avec des itérateurs, il est possible de construire une regex_replace () avec une simulation de rappel. Utilisation de la boucle tandis que vous pouvez le faire en gardant une trace du dernier match Itérateur et en fonction du segment actuel, sresult.append (lance, m [0] .First); Sresult + = std :: string ("CCC"); lanceend = mlast [0] .seconde; Dans une simulation de rappel en boucle, vous pouvez suivre le nombre de correspondances, Contrôler totalement la sortie et sortir de la boucle via pause; ou paramètre start = fin; Voir ceci par exemple Stackoverflow.com/Questtions/22617209/...