J'ai vu des modèles d'expression régulière qui utilisent une répétition explicitement numérotée au lieu de ?
, *
et +
, c'est à dire.:
Explicit Shorthand
(something){0,1} (something)?
(something){1} (something)
(something){0,} (something)*
(something){1,} (something)+
Les questions sont:
À ma connaissance, ils sont identiques. Je pense qu'il y a peut-être quelques moteurs qui ne prennent pas en charge la syntaxe numérotée, mais je ne sais pas lequel. Je me souviens vaguement d'une question sur SO il y a quelques jours où la notation explicite ne fonctionnait pas dans Notepad ++.
La seule fois où j'utiliserais une répétition numérotée explicitement, c'est lorsque la répétition est supérieure à 1:
{2}
{2,}
{2,4}
J'ai tendance à les préférer surtout lorsque le motif répété est supérieur à quelques caractères. Si vous devez faire correspondre 3 chiffres, certaines personnes aiment écrire: \d\d\d
mais je préfère écrire \d{3}
car il souligne le nombre de répétitions impliquées. De plus, si jamais ce nombre doit changer, je n'ai qu'à changer {3}
à {n}
et ne pas ré-analyser le regex dans ma tête ou m'inquiéter de le gâcher; cela nécessite moins d'effort mental.
Si ces critères ne sont pas remplis, je préfère la sténographie. L'utilisation de la notation "explicite" encombre rapidement le motif et le rend difficile à lire. J'ai travaillé sur un projet où certains développeurs ne connaissaient pas trop bien l'expression régulière (ce n'est pas exactement le sujet préféré de tout le monde) et j'ai vu beaucoup de {1}
et {0,1}
occurrences. Quelques personnes me demandaient de revoir le code de leur modèle et c'est à ce moment-là que je suggérerais de changer ces occurrences en notation abrégée et d'économiser de l'espace et, IMO, d'améliorer la lisibilité.
Je peux voir comment, si vous avez une expression régulière qui fait beaucoup de répétitions bornées, vous voudrez peut-être utiliser le {n,m}
forme toujours pour des raisons de lisibilité. Par exemple:
/^
abc{2,5}
xyz{0,1}
foo{3,12}
bar{1,}
$/x
Mais je ne me souviens pas avoir jamais vu un tel cas dans la vraie vie. Quand je vois {0,1}
, {0,}
ou {1,}
étant utilisé dans une question, il est pratiquement toujours fait par ignorance. Et dans le processus de réponse à une telle question, nous devrions également suggérer qu'ils utilisent le ?
, *
ou +
au lieu.
Et bien sûr, {1}
est un fouillis pur. Certaines personnes semblent avoir une vague idée que cela signifie "un et un seul" - après tout, cela doit signifier quelque chose, non? Pourquoi un tel langage pathologiquement laconique supporterait-il une construction qui prend trois caractères entiers et ne fait rien du tout? Sa seule utilisation légitime à ma connaissance est d'isoler une référence arrière suivie d'un chiffre littéral (par exemple \1{1}0
), mais il existe d'autres façons de procéder.
Ils sont tous identiques, sauf si vous utilisez un moteur regex exceptionnel. Cependant, tous les moteurs regex ne prennent pas en charge la répétition numérotée, ?
ou +
.
Si tous sont disponibles, j'utiliserais des caractères plutôt que des chiffres, simplement parce que c'est plus intuitif pour moi.
Ils sont équivalents (et vous découvrirez s'ils sont disponibles en testant votre contexte.)
Le problème que je prévois, c'est quand vous n'êtes peut-être pas la seule personne à avoir besoin de travailler avec votre code. Les regex sont assez difficiles pour la plupart des gens. Chaque fois que quelqu'un utilise une syntaxe inhabituelle, la question se pose: "Pourquoi ne l'ont-ils pas fait de la manière standard? Que pensaient-ils que je manque?"