Comment dire à RegEx (version .NET) d'obtenir la plus petite correspondance valide au lieu de la plus grande?
.net
regex
regex-greedy
non-greedy
Jonathan Allen
la source
la source
abcabk
eta.+?k
, RegEx correspondra à la chaîne entière.L'opérateur non gourmand,
?
. Ainsi:la source
L'opérateur non gourmand ne signifie pas la correspondance la plus courte possible:
a.+?k
correspondra à la chaîne entière (dans cet exemple) au lieu des trois derniers signes uniquement.J'aimerais plutôt trouver la plus petite correspondance possible.
C'est la dernière correspondance possible pour «
a
» pour permettre toujours toutes les correspondancesk
.Je suppose que le seul moyen de le faire est d'utiliser une expression comme:
Afficher l'extrait de code
la source
cab
. Si mon entrée estcaaacab
et que je la recherche,a.*?b
elle renverra la chaîne complète au lieu de la courte correspondance à l'intérieur. Comment rechercherais-je en arrière à partir dub
?START[^START]*?END
(où START et END sont vos expressions régulières de début et de fin). Cela signifie essentiellement "correspond à tout ce qui va de START à END où les caractères