在正则表达式中,
(\w+)?
和(\w*)
有什么区别吗?它们看起来是一样的,不是吗?(\w+)?
和 (\w*)
都匹配相同的(0..+inf个单词字符)。
然而,它们之间有微小的差异:
在第一种情况下,如果这部分正则表达式匹配了 ""
,捕获组将不存在。而在第二种情况下,它是空的。在某些语言中,前者会表现为 null
,而后者始终应该是 ""
。
例如,在Javascript中,
/(\w*)/.exec("") // ["", ""]
/(\w+)?/.exec("") // ["", undefined]
在 PHP (preg_match
) 中,如果没有匹配到对应的键,则在 matches 数组中该键将不存在:http://3v4l.org/DB6p3#v430
""
会导致结果为 null 或空字符串? - Cozzamaraundefined
而不是空字符串(因为我总是只检查真实性)。 - Bergi
""
和null
的区别。 - John Dvorak(\w+)?
。 - 爱国者