2013-01-17 16 views
19

Regex'te (\w+)? ve (\w*) arasında bir fark var mı?Regex farkı: ( w +)? ve ( w *)

Aynı görünüyor, öyle değil mi?

+0

Aynı görünüyor: Örneğin JavaScript yılında

, PHP

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

(preg_match), ilk durumda, ilgili anahtar maçları dizide sadece yoktur –

+2

'(\ w +)?' null 'null 'ile ilgilenirseniz garip görünüyor. Onu nerede gördün? Dış kaynak bağlantısı var mı lütfen? –

+0

Şirketimdeki –

cevap

27

(\w+)? ve (\w*) hem

Ancak hafif bir fark vardır aynı (0 .. + inf kelime karakter) eşleşecek: İlk durumda

, regex bu bölümü "" eşleşirse, yakalama grubu yoktur. İkinci durumda, boş. Bazı dillerde, ilk null olarak görüntülenir, ikincisi her zaman "" olmalıdır. hariç http://3v4l.org/DB6p3#v430

+0

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' n '' null ** veya boş dize ile sonuçlanır? – Cozzamara

+0

@Cozzamara İlk durumda, boş bir eşleşme _not_ yakalandı. –

+1

Hangi motor tarafından? Hem Perl hem de SED **, her iki desenle boş dizgeyi yakalar – Cozzamara