6
votes

Regex, remplacer toutes les occurrences du sous-groupe

Je veux remplacer "toutes les" occurrences de "A" dans les parenthèses avec "B".

J'ai: P>

a(bbb)a


0 commentaires

4 Réponses :


1
votes

Je ne pense pas que vous puissiez le faire directement avec std :: regex_replace code>;; Il ne semble pas être couvert dans l'une des spécifications de format REGEX pertinentes. Cependant, vous pouvez simplement faire quelque chose comme ceci:

std::string s = "a(aaa)a";
std::regex re("(.*\\()(a*)(\\).*)"); // Regex amended to capture all a's between ()
std::smatch m;

std::regex_search(s, m, re);
s = m.format("$1" + std::string(m[2].length(), 'b') + "$3"); // match length known here


1 commentaires

Intelligent, mais ce n'est pas tout à fait ce que j'avais à l'esprit. Il couvre mon exemple que je dois admettre, mais j'ai besoin d'une solution où le sous-groupe peut se produire n'importe où dans les parenthèses.



0
votes

Il semble que la seule solution appropriée soit de faire deux recherches surgex. Un pour extraire la sous-chaîne de la parenthèse puis effectuer une seconde regex sur cette chaîne. xxx pré>

entrée: p> xxx pré>

sortie: P> >

a(b b)a( b ) a


0 commentaires

3
votes

Le code suivant est généralisé. Prend en charge pcre , PCRE2 et stl regex libs xxx

pour C ++ emballeur PCRE2 Utilisez cette liberce: JPCRE2


2 commentaires

Veuillez formater votre code et n'utilisez pas de nouveau / Supprimer. Merci.


PCRE2_DOTALL PCRE2_MULLILINE PCRE2_UTF ne fonctionne pas Cela ne fonctionnera pas si vous l'ajoutez à l'objet Regexreplace. Celles-ci sont compilées des options. La regex doit être compilée avec ces options.



0
votes

Ceci ferait le travail: xxx

sortie: xxx


0 commentaires