Je suis nouveau dans regex, et comme j'ai étudié, le * correspond à zéro ou plus et + correspond à un ou plusieurs, donc j'ai commencé à tester ceci:
array(1) {
[0]=>
string(1) "a"
}
array(1) {
[0]=>
string(0) ""
}
array(1) {
[0]=>
string(1) "a"
}
mais le résultat est que * ne correspond à rien et est retourné vide tant que la lettre a existe:
<?php
preg_match("/a/", 'bbba',$m);
preg_match("/a*/", 'bbba',$o);
preg_match("/a+/", 'bbba',$p);
echo '<pre>';
var_dump($m);
var_dump($o);
var_dump($p);
echo '</pre>';
?>
donc ce qui me manque ici.
3 Réponses :
* signifie que l'élément précédent sera mis en correspondance zéro ou plusieurs fois.
+ signifie que l'élément précédent sera mis en correspondance une ou plusieurs fois.
Aussi a * correspond à vide, c'est pourquoi il affiche un résultat vide. Vous pouvez utiliser preg_match_all ("/ a * /", 'bbba', $ o); puis filtrer les résultats sur les valeurs non vides du tableau résultant.
/ a / correspond au premier a dans bbba
/ a * / correspond à 0 ou plusieurs caractères a . Il y a 0 caractère a entre le début de la chaîne et le premier b , donc il y correspond.
/ a + / correspond à 1 ou plusieurs caractères a , donc il correspond au premier a caractère
La chose à noter ici est qu'une expression régulière essaiera de correspondre le plus tôt possible dans la chaîne qu'elle vérifie.
C'est un comportement «paresseux». Il existe une bonne explication à ce comportement en ce qui concerne les expressions régulières [ici] [1]. [1]: stackoverflow.com/questions/2301285/...
a * signifie une chaîne de correspondance qui ne peut PAS contenir a car * correspond à zéro ou plus,
d'où le motif a * correspondra même à une chaîne vide.
Pour voir toutes les correspondances, vous pouvez utiliser preg_match_all , comme:
array(1) {
[0]=>
array(5) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(0) ""
[3]=>
string(1) "a"
[4]=>
string(0) ""
}
}
comme résultat, vous verrez:
<?php
preg_match_all("/a*/", 'bbba', $o);
var_dump($o);
j'espère que cela vous aidera.
Merci beaucoup, cette ligne a rendu plus claire la chaîne de correspondance qui ne peut PAS contenir de , qui s'intègre à la réponse de @ JGNI. Merci à vous deux
@MohamedOmar bienvenue à tout moment!)
Je pense que ce sera plus précis si nous disons (correspond à rien ou a). parce que si correspond à une chaîne qui ne peut pas contenir, signifierait correspondre à n'importe quoi, disons b.
Dans le résultat que vous avez montré ici, rien n'est retourné et s'il y en a, mais rien de plus
Parce que
a *correspond également à vide, c'est pourquoi il affiche un résultat videa *correspondait. Il correspondait à zéro "a".@catcon merci, j'ai transféré vers
preg_match_allet maintenant j'obtiens le résultat de chaque étape stockée dans le tableau