web-dev-qa-db-ja.com

正規表現の違い:(\ w +)?および(\ w *)

正規表現で(\w+)?(\w*)に違いはありますか?

同じようですね。

23
爱国者

(\w+)?(\w*)は両方とも同じ(0 .. + inf Word文字)に一致します

ただし、わずかな違いがあります。

最初の場合、正規表現のこの部分が""と一致する場合、キャプチャグループは存在しません。 2番目の場合、空です。一部の言語では、前者はnullとして現れますが、後者は常に""でなければなりません。

たとえば、Javascriptでは、

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

PHP(preg_match)の場合、前者の場合、対応するキーは一致配列に存在しません: http://3v4l.org/DB6p3#v43

29
John Dvorak