2010-09-10 4 views
1

La spécificité Java EE REST, JAX-RS, décrit la conversion des variables de chemin en regex, comme dans /customer/{id}.'+' et '?' consécutivement dans une expression régulière

De JAX-RS 1.1 Spec, Page 19:

remplacer chaque variable de modèle URI avec un groupe de capture contenant l'expression régulière spécifiée ou '(? [/] +)' Si aucune expression régulière est spécifié.

L'API Java doc de java.util.regex.Pattern dit:

X?  X, once or not at all 
X+  X, one or more times 

Alors, que signifie +??

Répondre

9

le ? juste après un + ou un * signifie qu'il ne sera pas gourmand.

Par exemple:
(.*)f dans "testftestf", le premier groupe correspondra à "testftest"
(.*?)f dans testftestf », le premier groupe correspondra à "test"


Ressources:

+2

Pour clarifier, une expression ungreedy est celle dans laquelle la correspondance la plus courte possible est faite, par opposition à une expression gourmande, la plus longue possible est faite. – bgw

+0

Merci, je ne le savais pas. Mais qu'est-ce que cela signifie dans ce cas '([/] +?)'? Pour autant que je comprenne tout est lu jusqu'au prochain '/', serait-il gourmand ou non. – deamon

+0

Dans ce cas, la partie '[/] +' serait paresseuse et essayerait d'attraper un seul caractère ('+' est au moins un) avec [^ /] *? rien ne serait pris. –