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

时间:2013-01-17 06:28:06

标签: regex

正则表达式中(\w+)?(\w*)之间是否有任何区别?

看来是一样的,不是吗?

1 个答案:

答案 0 :(得分:29)

(\w+)?(\w*)都匹配相同(0 .. + inf字符)

然而,有一点点差异:

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

在Javascript中,例如,

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

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