Je veux faire correspondre un motif, remplacer une partie du motif et utiliser une variable dans le motif dans le cadre de la chaîne de remplacement. p>
est-ce correct? p>
English: remplacez toute quantité de blanchâtre suivie de la chaîne / s / ^ ((\ s +) privé \ sfunction \ s__construct \ (\)) / (2) def \ s__init __ code> p> p>
"Fonction privée __Construction ()" code> avec la même quantité de blancheur et la chaîne
def __init __ code>. Alors, mon regex est mauvais ou quoi? P>
p>
3 Réponses :
Ceci est appelé une brouillon, et vous utilisez donc pour le modèle \ i code> pour vous reporter au groupe capturé de la même manière du motif. P>
^ ((\ s +) privé \ sfunction \ s__construct \ (\)) code>, le remplacement est
\ 2def __init __ p>. P>.
D'accord, mais voici un autre exemple: : s / ^ ((\ s +) $ ceci ->). * $ / \ 26elf ./< / code>. Comme vous pouvez le constater, je cherche
^ (\ s +) ceci ->. * $ Code>, non? Mais je veux seulement remplacer cette partie du modèle de recherche:
\ s + ceci -> code>. Donc, j'ai utilisé deux ensembles de crochets .... dois-je référer
\ 2 code> ou
\ 1 code>?
Les crochets de capture sont comptés à gauche à droite, donc \ 1 code> pour cet exemple. Comme cela se trouve dans VI, vous devez échapper aux bits de l'expression régulière, voir la réponse de @ Prashantbhate. Soit cela ou j'utilise le drapeau
\ v code> dans VIM pour utiliser la syntaxe de regex normale, mais je ne sais pas si VI l'a.
Je présume que vous voulez le remplacer dans remplacer toutes les occurrences p> remplacez premier p> Peu de suggestions à votre modèle p> http://vimregex.com devrait vous aider à démarrer. p> p> vi code>
/ code> est utilisé dans
VI code> pour la recherche, utilisez
: code> li>
( code>
) code> dans VI li>
\ i code> où je is Xth Capture Group comme
\ 1 code>
\ 2 code> Pour retour Référence Modèles groupés dans le remplacement li>
\ s code> ne peut pas être utilisé dans le texte de remplacement Utilisation
'' code> au lieu de li>
/ g code> si vous souhaitez remplacer toutes les occurrences li>
ul>
Mais voici un problème .... si j'ai {$ \ n \ r remplactemps code>, je souhaite rechercher
{$ \ n \ r \ s + remplacer ^ code>, et je veux seulement remplacer
\ s + remplactemps code>. La raison pour laquelle je veux faire est parce qu'il y a des moments où "Remplacement" n'est pas précédé de
{$ \ n \ r code>, et je ne veux pas que la commande soit activée sur ceux-ci. Alors, puis-je remplacer "Remplacement" uniquement lorsqu'il est précédé de
{$ \ n \ r code> et commencez mon remplacement avec la même quantité de blancheur?
Merci beaucoup pour le lien avec vimregex.com . Quelle bonne page! :)
Je ne pense pas que quiconque comprenne vraiment la question. Fondamentalement, la façon dont je fais cela est la suivante: p>
"Si vous souhaitez rechercher un motif de remplacement, un motif A et le remplacer par une chaîne de remplacement, un motif I, uniquement s'il commence par un motif, un motif B, alors vous devez inclure le motif B dans la chaîne de remplacement , comme ceci: / (modèle B) (modèle A) / (motif b) (i) / g ". p>
C'est un peu verbeux mais qui mérite d'être lu. P>
Dans le passé, je suis sûr que quelqu'un a pensé, "il pourrait économiser beaucoup de ressources pour ne pas remplacer réellement modèle B code> avec
motif B code>. C'est redondant faire cela." Peut-être que cela arrive automatiquement. Je n'ai pas trouvé de méthode intégrée à VI ou à tout autre programme pour le faire. Je suis sûr que je pouvais écrire un script pour le faire, cependant. P>
Dans quelle langue / application utilisez-vous cela? (Pas la langue que vos données sont dans. Celui qui exécute l'expression.)