正则表达式的区别:(\ w +)?和(\ w*)

爱国者*_*爱国者 23 regex difference

正则表达式(\w+)?(\w*)正则表达式之间有什么区别吗?

看来是一样的,不是吗?

Joh*_*rak 29

(\w+)?并且(\w*)两者匹配相同(0 .. + inf字符)

但是,有一点点差异:

在第一种情况下,如果正则表达式的这部分匹配"",则捕获组不存在.在第二种情况下,它是空的.在某些语言中,前者表现为null后者应始终如此"".

例如,在Javascript中,

/(\w*)/.exec("")  // ["", ""]
/(\w+)?/.exec("") // ["", undefined]
Run Code Online (Sandbox Code Playgroud)

在PHP(preg_match)中,在前一种情况下,匹配数组中缺少相应的键:http://3v4l.org/DB6p3#v430