Bonjour je ne comprend pas quel est la différence entre .*? et .*
car * et ? sont tout deux des quantificateur
qu'est ce que le ? apporte de plus a cette expression .*?
merci d'avance
Bonjour je ne comprend pas quel est la différence entre .*? et .*
car * et ? sont tout deux des quantificateur
qu'est ce que le ? apporte de plus a cette expression .*?
merci d'avance
Bonjour,
A moins de limité le *, je ne vois pas a quoi cela sert, même pourquoi limité le *
Tu as vu ça dans quel cadre ?
je voulais faire un replace de se qui se trouve entre /* */ par string.empty
et quand j ' ai plusieurs notreplace/*Content*/ dans la chaine et que j' utilise .* il va faire un remove sur tout sauf se qui est devant le premier
il ne garde que le premier des notreplace, donc j ai été contrain de faire ceci dans ma regex .*?
ces pour cela qu il faut limiter * si je comprend bien
le ? représente la fin de la chaine, donc oui
le "?" la fin de chaine ???? c'est "$" la fin de chaine !!!!
la différence entre * et *? est je crois que la première version va essayer de matcher avec le pattern qui comporte le plus de caractère alors que le second va essayer de matcher avec le motif qui en comporte le moins.*
pour aller plus loin cherche regex+lazy et regex+greedy.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 preg_match_all('#a.*?a#', 'amanapa', $arr, PREG_PATTERN_ORDER); preg_match_all('#a.*a#', 'amanapa', $arr, PREG_PATTERN_ORDER);
MaitrePylos -1.
Oui,oui me suis trompé. Arrive a tout le monde.
OK je vous remercie pour vos réponse
Éffectivement, le ? sert à passer un quantificateur (* + {n,}) de greedy à non-greedy par défaut. Mais il sert aussi à faire le contraire (non-greedy->greedy) si on utilise le modifier U qui rend tous les quantificateurs de la pattern non-greedy. De plus, il peut être inopérant selon les circonstances.
exemple:On obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 $string = 'Janine mange des bananes.'; // cette chaîne comporte la sous-chaîne "an" deux fois de part et d'autre de la lettre g $patterns = array( // avec les quantificateurs greedy (par défaut) '/[^g]*(an[^g]*g.*an)/', '/^[^g]*?(an[^g]*g.*an)/', '/^[^g]*(an[^g]*g.*?an)/', '/^[^g]*?(an[^g]*g.*?an)/', // avec les quantificateurs non-greedy (par le modifier U) '/^[^g]*?(an[^g]*g.*?an)/U', '/^[^g]*(an[^g]*g.*?an)/U', '/^[^g]*?(an[^g]*g.*an)/U', '/^[^g]*(an[^g]*g.*an)/U' ); // le quantificateur du milieu peut être greedy ou non-greedy, // cela n'a pas d'importance, car il est coincé à droite par la lettre g et obligé d'aller jusqu'à elle, // et à gauche par le premier quantificateur qui est évalué avant lui. // C'est le premier quantificateur qui, évalué en premier, conditionne la taille de la capture à gauche du g. // Le test s'effectue uniquement sur le premier et le dernier quantificateur. foreach ($patterns as $pattern) { preg_match( $pattern, $string, $match); echo $match[1] . '<br/>'; }
ange des banan
anine mange des banan
ange des ban
anine mange des ban
ange des banan
anine mange des banan
ange des ban
anine mange des ban
À ce titre le ? peut être plutôt considéré comme un commutateur greedy/non-greedy.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager