正则表达式中(\w+)?
和(\w*)
之间是否有任何区别?
答案 0 :(得分:29)
(\w+)?
和(\w*)
都匹配相同(0 .. + inf字符)
然而,有一点点差异:
在第一种情况下,如果正则表达式的这一部分与""
匹配,则捕获组不存在。在第二种情况下,它是空的。在某些语言中,前者表示为null
,而后者应始终为""
。
在Javascript中,例如,
/(\w*)/.exec("") // ["", ""]
/(\w+)?/.exec("") // ["", undefined]
在PHP(preg_match
)中,在前一种情况下,匹配数组中没有相应的键:http://3v4l.org/DB6p3#v430