D'après ce que je peux recueillir de la documentation Pharo sur regex, je peux définir un objet d'expression régulière comme:chaîne de capture en regex remplacement
re := '(foo|re)bar' asRegex
Et je peux remplacer l'expression régulière en correspondance avec une chaîne par ceci:
re copy: 'foobar blah rebar' replacingMatchesWith: 'meh'
Ce qui résultera en: `'meh blah meh'.
Jusqu'ici, tout va bien. Mais je veux remplacer le 'bar'
et laisser le préfixe seul. Par conséquent, il me faut une variable pour gérer la capture parenthétique:
re copy: 'foobar blah rebar' replacingMatchesWith: '%1meh'
Et je veux le résultat: 'foomeh blah remeh'
. Cependant, cela me donne juste: '%1meh blah %1meh'
. J'ai également essayé d'utiliser \1
, ou \\1
, ou $1
, ou {1}
et j'ai obtenu le remplacement littéral de chaîne, par exemple. Comme résultat:, '\1meh blah \1meh'
.
je peux le faire assez facilement dans GNU Smalltalk avec:
'foobar blah rebar' replacingAllRegex: '(foo|re)bar' with: '%1meh'
Mais je ne trouve nulle part dans la documentation regex Pharo qui me dit comment je peux le faire en Pharo. J'ai aussi fait des recherches sur Pharo regex, mais je n'ai rien trouvé. Cette fonctionnalité fait-elle partie de la classe RxMatcher ou d'une autre classe de regex Pharo?
il semble Pharo ne prend pas en charge le remplacement des groupes de capture – rock321987
Eh bien, avez-vous essayé les styles habituels de références arrières? Comme '\ 1', ou' \\ 1' ou '$ 1' (peut-être avec' matchesReplacedWith')? Les groupes de capture sont pris en charge, il est clair à partir de ce que l'appariement peut faire dans Pharo, mais il n'y a aucune indication sur si les références arrières sont prises en charge en tant que parties des modèles de remplacement. –
@ WiktorStribiżew Oui, j'ai essayé '\ 1',' \\ 1', et '$ 1' aussi. Dans chaque cas, le remplacement était la chaîne littérale. J'ai mis à jour ma question en indiquant ces tentatives. Je vois que les groupes de capture sont supportés pour ce qui est de l'appariement. La documentation contient des exemples de capture et d'énumération des captures. Cependant, rien à propos de les référencer dans une chaîne de remplacement. Cela semble fondamental à regex trouver/remplacer à moi, donc je suis surpris que ce n'est pas pris en charge. – lurker