Comment dire à RegEx (version .NET) d'obtenir la plus petite correspondance valide au lieu de la plus grande?
Comment dire à RegEx (version .NET) d'obtenir la plus petite correspondance valide au lieu de la plus grande?
Réponses:
Pour une expression régulière comme .*ou .+, ajoutez un point d'interrogation ( .*?ou .+?) pour faire correspondre le moins de caractères possible. Pour éventuellement faire correspondre une section (?:blah)?mais sans correspondance sauf si c'est absolument nécessaire, utilisez quelque chose comme (?:blah){0,1}?. Pour une correspondance répétée (utilisant {n,}ou {n,m}syntaxique), ajoutez un point d'interrogation pour essayer d'en faire correspondre le moins possible (par exemple {3,}?ou {5,7}?).
La documentation sur les quantificateurs d'expressions régulières peut également être utile.
L'opérateur non gourmand, ?. Ainsi:
.*?
L'opérateur non gourmand ne signifie pas la correspondance la plus courte possible:
abcabk
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 correspondances k.
Je suppose que le seul moyen de le faire est d'utiliser une expression comme:
a[^a]+?k
cab. Si mon entrée est caaacabet que je la recherche, a.*?belle renverra la chaîne complète au lieu de la courte correspondance à l'intérieur. Comment rechercherais-je en arrière à partir du b?
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
abcabketa.+?k, RegEx correspondra à la chaîne entière.