Bonjour,


Je m'essaye à regex en C++ et j'ai un comportement bizarre que je ne m'explique pas.

Pour le contexte: Je parcours un fichier LaTeX ligne par ligne. Je recherche les lignes ayant le code include afin de capturer ce qui se trouve entre accolade.

exemple de ligne \include{part/A-initiation} ou encore \include{part/B-autonomie}}]. Notez dans le deuxième cas la double accolade provenant de la fermeture d'une commande initié dans une autre ligne du fichier.

voici mon code regex pour réaliser cette capture
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
regex pattern { R"(\include\{(.*)(\}+))"}
result = regex_replace("\include{part/A-initiation}", pattern, "$1");
cout << result << endl;
result = regex_replace("\include{part/B-autonomie}}", pattern, "$1");
cout << result << endl;
qui contre toute attente me donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
\part/A-initiation
\part/B-autonomie}
Notez le \ en début de chaque ligne et l'accolade en fin de deuxième ligne.

D’où mes questions:
  1. Pourquoi mes lignes commence par \?
  2. Pourquoi la deuxième accolade n'est pas supprimé? Il me semblait que opérateur + était gourmand.


J'en mangerais mon chapeau.