web-dev-qa-db-fra.com

Différence d'expression régulière: (\ w +)? et W*)

Y a-t-il une différence entre (\w+)? et (\w*) en regex?

C'est la même chose, non?

23
爱国者

(\w+)? et (\w*) les deux correspondent (0 .. + inf caractères Word)

Cependant, il y a une légère différence:

Dans le premier cas, si cette partie de l'expression régulière correspond à "", le groupe de capture est absent. Dans le second cas, il est vide. Dans certaines langues, la première se manifeste sous la forme d'un null tandis que la seconde doit toujours être "".

En Javascript, par exemple,

/(\w*)/.exec("")  // ["", ""]
/(\w+)?/.exec("") // ["", undefined]

Dans PHP (preg_match), dans le premier cas, la clé correspondante est simplement absente dans le tableau des correspondances: http://3v4l.org/DB6p3#v4

29
John Dvorak