2013-04-28 5 views
2

Je n'ai pas utilisé le quantificateur réticent dans regex jusqu'à présent et je regarde quelques questions du site pour appréhender sa fonction et son utilisation. Bien que le similar question soit assez descriptif, je n'arrive toujours pas à comprendre comment il est associé à l'exemple dans le java tutorial. J'ai compris que le quantificateur réticent correspond aussi peu que possible. Alors, comment expliquer qu'une regexUtilisation de quantificateur réticent dans regex

".*?foo" 

sur une chaîne

"xfooxxxxxxfoo" 

retourne deux matches: "xfoo" et "xxxxxxfoo"?

De plus, étant donné que l'explication du quantificateur possessif est insuffisante, quelqu'un pourrait-il expliquer pourquoi l'expression rationnelle

".*+foo" 

sur la même chaîne ne correspond pas à quoi que ce soit?

+1

Il existe une explication très complète [dans ce tutoriel] (http://www.regular-expressions.info/repeat.html). Et [voici la partie sur les quantificateurs possessifs] (http://www.regular-expressions.info/possessive.html). Je ne me souviens pas combien des chapitres précédents ces deux pages vous obligent à lire, mais ça vaut le coup d'essayer. Si vous êtes bloqué sur certaines des explications, je suggèrerais que vous lisiez tout le tutoriel. Tout est très clair et bien expliqué à mon avis. –

Répondre

3

La description sur la page tutoriel dans la section «Différences entre les quantificateurs greedy, réticents et possessifs» me semble très claire. Quelle partie ne comprenez-vous pas?

Pour répondre à vos questions:

  • Pour le motif ".*?foo", le premier quantificateur réticent (.*?) saisit rien; le reste du motif (foo) ne correspond pas. Faire correspondre les sauvegardes au quantificateur réticent qui saisit alors un caractère (x); le reste du motif correspond alors. Le motif entier recommence alors (après le premier "foo") et ne correspond pas jusqu'à ce qu'il ait attrapé tous les caractères x avant le second foo, auquel point il a le deuxième match.

  • Pour le motif, (".*+foo"), le quantificateur possessif (.*+) saisit toutes les entrées possibles (depuis "." correspond à tout) et il n'y a rien qui reste pour correspondre à la "foo" partie du motif. Parce que ".*+" est possessif, il ne rendra rien; ainsi, contrairement au quantificateur gourmand, lors de l'appariement des sauvegardes au quantificateur possessif, il échoue simplement.

Questions connexes