Correspond à la chaîne "abc 123". Demandez à retirer ABC et 123.
<?php
$str = "abc 123" ;
$preg = "/^(.*?)\s+(.*?)$/";
$preg1 = "/^(.*?)\s*(.*?)$/";
preg_match($preg, $str, $tmp);
preg_match($preg1, $str, $tmp1);
echo '<pré>';
print_r($tmp);
print_r($tmp1);
echo '</pre>';
// $tmp
Tableau
(
[0] =>
[1] =>
[2] => 123
)
// $tmp1
Tableau
(
[0] =>
[1] =>
[2] =>
)
Pourquoi les résultats de correspondance sont-ils différents ? Y a-t-il quelque chose auquel je dois prêter attention ?
Aucun des deux premiers étudiants n’a répondu sur ce point.
Laissez-moi y répondre,
Le vrai secret réside dans les règles du
matching paresseux (ou non gourmand)
:惰性(或叫非贪婪)匹配
的规则:星号或加号后跟个问号,就表示惰性匹配,意思是尽可能少的匹配。
/(.*?)s+/
,加号表示前面的匹配(也就是空格s) 出现1次或多次。 这段的意思是尽可能少的匹配,后面至少有一个空格s。 这么看,前面这个括号它能匹配到 abc。/(.*?)s*/
Un astérisque ou un signe plus suivi d'un point d'interrogation indique une correspondance paresseuse, ce qui signifie une correspondance le moins possible./(.*?)s+/
, le signe plus indique que la correspondance précédente (c'est-à-dire l'espace s) apparaît une ou plusieurs fois. Ce paragraphe signifie correspondre le moins possible, suivi d'au moins un espace s. En regardant les choses de cette façon, la parenthèse précédente peut correspondre à abc./(.*?)s*/
, l'astérisque indique que la correspondance précédente (c'est-à-dire l'espace s) apparaît 0 fois ou plus. Le sens de ce paragraphe est de correspondre le moins possible, et il ne peut y avoir rien après (s*). Cela donne une chaîne vide, ne correspondant à rien. 🎜🎜 🎜Veuillez noter que les résultats des jokers réguliers s+ et s* sont nettement différents.
équivaut à {0,}."*"
Correspond à la sous-expression précédente zéro ou plusieurs fois. Par exemple, zo"*"
匹配前面的子表达式零次或多次。例如,zo能匹配“z"以及"zoo"。等价于{0,}。"+"
correspond à "z" et "zoo".
?)s+(."+"
Correspond à la sous-expression précédente une ou plusieurs fois. Par exemple, « zo+ » correspond à « zo » et « zoo », mais pas à « z ». + équivaut à {1,}. /^(.?)$/
Le premier crochet signifie correspondre à tous les caractères, " ?" Correspondance non gourmande, ce qui signifie faire correspondre le caractère ou la sous-expression précédent zéro ou une fois.Le "/" devant et le "/" à l'arrière indiquent que le début et la fin n'ont aucune signification pratique.
Le premier "^" signifie correspondre au début du texte
() est la priorité de gauche à droite "." signifie correspondre à n'importe quel caractère, "*" signifie correspondre plus de 0 fois
s est n'importe quel caractère d'espacement
🎜Je vous recommande un tutoriel pour apprendre : introduction de 30 minutes aux expressions régulières🎜Corrigez la réponse, cela est dû à une correspondance paresseuse, qui est également l'une des difficultés de l'expression régulière.