remplacer le groupe de capture
Si j'ai une regex avec une capture d'un groupe, par exemple foo(_+f)
. Si je correspond à ce contre une chaîne de caractères et souhaitez remplacer la première capture d'un groupe à tous les matches avec baz
de sorte que
foo___f blah foo________f
est converti à:
foobaz blah foobaz
Il ne semble pas être un moyen facile de faire cela en utilisant les bibliothèques standard. Si j'utilise Matcher.replaceAll() ce sera de remplacer tous les matches de l'ensemble du motif et de convertir la chaîne de
baz blah baz
Évidemment, je peux juste faire une itération sur les matchs, de stocker le début et la fin de l'index de chaque capture d'un groupe, puis revenir en arrière et de les remplacer, mais est-il un moyen plus facile?
Grâce,
Ne
source d'informationauteur Dónal
Vous devez vous connecter pour publier un commentaire.
Je pense que vous voulez quelque chose de ce genre?
Ici, il vous suffit de remplacer l'ensemble du match avec
"baz"
mais le match utilise lookbehind pour s'assurer que_+f
est précédée parfoo
.Voir aussi
Si lookbehind n'est pas possible (peut-être parce que la longueur n'est pas fini), puis il suffit de capturer ce que vous n'êtes PAS remplacer, et vous y reporter en arrière dans la chaîne de remplacement.
Donc, ici, nous sommes, en fait, uniquement le remplacement de ce
\2
matchs.Donc je ne pense pas qu'aucune de ces réponses ne sont justice plus abstraits cas de la question suivante, qui est quelque chose que je suis tombé sur moi-même, j'ai donc écrit un code qui fonctionne dans le cas plus général:
Sur votre exemple, il ne fait précisément que vous le décrivez:
Imprime:
Est-ce n'importe où près ....
C'est à dire, ajouter une capture d'un groupe de 'foo' également. Sinon, un simple remplacement serait