Si j'exécute
"Year 2010" =~ /([0-4]+)/; print $1;
7 Réponses :
Vous obtenez un match vide à droite au début de la chaîne "année 2010" pour le premier formulaire car le * correspondra immédiatement à 0 chiffres. Le formulaire + devra attendre jusqu'à ce qu'il voit au moins un chiffre em> avant de correspondre. P>
Vraisemblablement si vous pouvez passer par tous les matchs du premier formulaire, vous trouverez finalement 2010 ... mais probablement seulement après avoir trouvé un autre match vide avant le 'E', puis avant le 'a', etc. p>
Kleene Star généré par Superset contient également une chaîne vide, donc oui, elle correspondra à la chaîne vide avant Y, E, A, R, WhitSpace, et ensuite, il trouvera 2010.
Le premier correspond à la chaîne de longueur zéro au début (avant y code>) et le renvoie. La seconde recherche des chiffres d'un ou plusieurs ou attend jusqu'à ce qu'il trouve 2010 code>. P>
La première expression régulière correspond avec succès à zéro chiffres au début de la chaîne, ce qui permet de capturer la chaîne vide. P>
La deuxième expression régulière ne correspond pas au début de la chaîne, mais elle correspond à 2010. P>
Vous pouvez également utiliser YAPE :: Regex :: Expliquer pour expliquer une expression régulière comme sortie: p>
Le symbole étoile tente de correspondre essentiellement à 0 ou plusieurs symboles dans un ensemble donné (en théorie, le jeu {x, y} * est constitué de chaîne vide et de toutes les séquences finies possibles faites de x et y), et donc, il va Match exactement des caractères à zéro (chaîne vide) au début de la chaîne, zéro caractères après le premier caractère, zéro caractères après le deuxième caractère, etc., puis il trouvera enfin 2 et correspondre à tout entier 2010. P>
Le symbole PLUS correspond à un ou plusieurs caractères à partir du jeu donné ({x, y} + consiste en toutes les séquences finies possibles en X et Y, sans la chaîne vide, par opposition à {x, y} *). Donc, le premier caractère de correspondance remplie est 2, puis le prochain - 0 est coché, puis 1, puis une autre 0, puis la phrase se termine, le groupe trouvé ainsi de 2010 '. P>
Il s'agit d'un comportement standard pour des expressions régulières, définies dans la théorie des langues formelles. Je suggère fortement d'apprendre une théorie des expressions régulières, elle ne peut pas blesser, mais peut aider :) p>
Pour faire votre première correspondance, utilisez l'ancre ' $ forte>':
Nous avons cela comme une question truc dans apprendre Perl em>. Toute regex pouvant correspondre à zéro caractères qui ne correspond pas au début de la chaîne correspondre à zéro caractères. P>
Le moteur REGEX PERL correspond à la plus longue correspondance la plus à gauche, avec la partie la plus à gauche provenant d'abord. Tous les moteurs Regex ne fonctionnent pas comme ça, cependant. Si vous souhaitez tous les détails techniques, lisez Maîtriser régulièrement des expressions régulières em>, ce qui explique comment les moteurs Regex fonctionnent et trouvent des correspondances. P>
Ce qui est un peu étrange est que
/ \ s ([0-4] *) / code> n'a pas le même comportement de raccourci. Il ne dis pas "J'ai assorti la corde zéro à la fin de l'espace, voici."@Axeman, c'est parce que
* code> est gourmand. Les chiffres sont là, alors il les attrape. Si vous faites correspondre contre'L'année 2010' code>,1 $ code> serait la chaîne de longueur zéro suivant le premier espace.