133 votes

Regex plus vs différence étoile ?

Quelle est la différence entre :

(.+?)

y

(.*?)

quand je l'utilise dans mon php preg_match regex ?

10voto

wajatimur Points 492

Considérons ci-dessous la chaîne à faire correspondre.

ab

Le motif (ab.*) retournera une correspondance pour le groupe de capture avec un résultat de ab

Alors que le motif (ab.+) ne correspondra pas et ne retournera rien.

Mais si vous changez la chaîne de caractères en suivante, il retournera aba pour le motif (ab.+)

aba

0 votes

Je pense que c'est la meilleure réponse spécifique à la question de + vs *.

6voto

jeroen Points 47068

+ est minimal, * peut également être égal à zéro.

3 votes

"+ is minimal one" Que signifie cette phrase ?

0 votes

Je trouve que ces "définitions" sont trompeuses.

5voto

Second Rikudo Points 59550

Une étoile est très similaire à un plus, la seule différence étant que le plus correspond à 1 ou plus du caractère/groupe précédent, tandis que l'étoile correspond à 0 ou plus.

0voto

Crt Points 2353

Je pense que les réponses précédentes ne mettent pas en évidence un exemple simple :

Par exemple, nous avons un tableau :

numbers = [5, 15]

L'expression regex suivante ^[0-9]+ matches : 15 seulement. Cependant, ^[0-9]* correspond à la fois 5 and 15 . La différence est que le + L'opérateur doit avoir au moins un duplicate de l'expression regex précédente

0 votes

Euh, quoi ?!? Pourquoi cette réponse est-elle publiée ? Elle est tout simplement incorrecte. Les deux modèles correspondront certainement à des chaînes de caractères 5 y 15 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X