Je veux remplacer "toutes les" occurrences de "A" dans les parenthèses avec "B".
J'ai: P>
a(bbb)a
4 Réponses :
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
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.
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. entrée: p> sortie: P> > a(b b)a( b ) a
Le code suivant est généralisé. Prend en charge pcre strong>, PCRE2 strong> et stl fort> regex libs pour C ++ emballeur PCRE2 Utilisez cette liberce: JPCRE2 P> P>
Veuillez formater votre code et n'utilisez pas de nouveau / Supprimer. Merci.
PCRE2_DOTALL PCRE2_MULLILINE PCRE2_UTF ne fonctionne pas code> 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.
Ceci ferait le travail: sortie: p>