* représente l'appariement gourmand (autant que possible)
Dans Vim, vous pouvez utiliser des ancres de largeur nulle \zset \zepour définir le début et la fin du motif recherché, que vous souhaitez faire correspondre. Tout ce qui se trouve avant \zset après \zedans votre modèle ne sera pas affecté par le remplacement.
Pouvez-vous fournir une description de base de ce que \zscontient votre réponse?
EvergreenTree du
3
Il convient de noter que la raison pour laquelle cela fonctionne est parce qu'il .*est gourmand .
Wildcard
7
Vous pouvez rechercher la dernière correspondance en regroupant tout \(.*\), mais la dernière occurrence de pattern. Quitter ensuite avec le groupe capturé \1et ajouter le replacement.
(Ceci est inférieur à la \zssolution de @ ryuichiro , dans la mesure où votre \1approche est fonctionnellement équivalente, mais plus verbeuse. (D'un autre côté, il peut être plus facile de s'en souvenir pour certains, en particulier s'ils sont habitués à d'autres saveurs d'expression régulière.))
Aaron Thoma
0
Par souci d'exhaustivité, j'ai pensé publier une alternative. Vim a plusieurs éléments dont certains sont similaires aux assertions de recherche d' expression régulière plus standard (lookahead / lookbehind négatif / positif). /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
Dans ce cas, nous voulons une anticipation négative \@!, ce qui signifie que nous voulons affirmer que l' atome qui précède l'élément ne se produit pas après le motif . Dans ce cas, l'atome est le motif lui-même précédé de toute autre chose:
:%s/pattern\(.*pattern\)\@!/replacement/
La partie entre parenthèses est de largeur nulle et n'est pas incluse dans la correspondance, elle n'est donc pas remplacée par la substitution.
:h \@!pour plus d'informations ou :h pattern-multi-itemspour la section entière contenant d'autres variantes de lookaround.
\zs
contient votre réponse?.*
est gourmand .Vous pouvez rechercher la dernière correspondance en regroupant tout
\(.*\)
, mais la dernière occurrence depattern
. Quitter ensuite avec le groupe capturé\1
et ajouter lereplacement
.la source
\zs
solution de @ ryuichiro , dans la mesure où votre\1
approche est fonctionnellement équivalente, mais plus verbeuse. (D'un autre côté, il peut être plus facile de s'en souvenir pour certains, en particulier s'ils sont habitués à d'autres saveurs d'expression régulière.))Par souci d'exhaustivité, j'ai pensé publier une alternative. Vim a plusieurs éléments dont certains sont similaires aux assertions de recherche d' expression régulière plus standard (lookahead / lookbehind négatif / positif). /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
Dans ce cas, nous voulons une anticipation négative
\@!
, ce qui signifie que nous voulons affirmer que l' atome qui précède l'élément ne se produit pas après le motif . Dans ce cas, l'atome est le motif lui-même précédé de toute autre chose:La partie entre parenthèses est de largeur nulle et n'est pas incluse dans la correspondance, elle n'est donc pas remplacée par la substitution.
:h \@!
pour plus d'informations ou:h pattern-multi-items
pour la section entière contenant d'autres variantes de lookaround.la source