2013-01-17 6 views
19

C'è qualche differenza tra (\w+)? e (\w*) in regex?Differenza Regex: ( w +)? e ( w *)

Sembra lo stesso, vero?

+0

Sembra lo stesso, tranne se ti interessa '" "' vs. 'null' –

+2

' (\ w +)? 'sembra strano. dove l'hai visto? Qualche link a risorsa esterna per favore? –

+0

Ho visto '(\ w +)?' Nel mio progetto aziendale –

risposta

27

(\w+)? e (\w*) sia abbinare lo stesso (0 .. + caratteri di parola inf)

Tuttavia, v'è una leggera differenza:

Nel primo caso, se questa parte del regex "", il gruppo che cattura è assente. Nel secondo caso, è vuoto. In alcune lingue, il primo si manifesta come null mentre il secondo dovrebbe sempre essere "".

In JavaScript, ad esempio,

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

In PHP (preg_match), nel primo caso, il tasto corrispondente è semplicemente assente nella matrice partite: http://3v4l.org/DB6p3#v430

+0

In quale lingua la cattura di "" "restituisce ** null ** o stringa vuota? – Cozzamara

+0

@Cozzamara Nel primo caso, una corrispondenza vuota è _non_ catturata. –

+1

Con quale motore? Sia Perl che SED ** fanno ** catturano la stringa vuota da entrambi i modelli – Cozzamara