Подтвердить что ты не робот

Разница в регрессе: (\ w +)? и (\ w *)

Есть ли разница между (\w+)? и (\w*) в regex?

Кажется, то же самое, не так ли?

4b9b3361

Ответ 1

(\w+)? и (\w*) оба соответствуют одинаковым (0.. + inf словам)

Однако есть небольшая разница:

В первом случае, если эта часть регулярного выражения совпадает с "", группа захвата отсутствует. Во втором случае он пуст. На некоторых языках первое проявляется как null, а последнее всегда должно быть "".

В Javascript, например,

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

В PHP (preg_match) в первом случае соответствующий ключ просто отсутствует в массиве совпадений: http://3v4l.org/DB6p3#v430