正则表达式的区别: (\w+)?和 (\w*)
Posted
技术标签:
【中文标题】正则表达式的区别: (\\w+)?和 (\\w*)【英文标题】:Regex difference: (\w+)? and (\w*)正则表达式的区别: (\w+)?和 (\w*) 【发布时间】:2012-12-31 15:38:09 【问题描述】:正则表达式中(\w+)?
和(\w*)
之间有什么区别吗?
看起来一样,不是吗?
【问题讨论】:
看起来确实是一样的,除非你关心""
vs. null
(\w+)?
似乎很奇怪。你在哪里看到的?请问有外部资源的链接吗?
我在公司项目中看到了(\w+)?
【参考方案1】:
(\w+)?
和 (\w*)
都匹配相同(0..+inf 单词字符)
但是,有一点不同:
在第一种情况下,如果这部分正则表达式匹配""
,则捕获组不存在。在第二种情况下,它是空的。在某些语言中,前者表现为null
,而后者应始终为""
。
例如在 javascript 中,
/(\w*)/.exec("") // ["", ""]
/(\w+)?/.exec("") // ["", undefined]
在 php (preg_match
) 中,在前一种情况下,匹配数组中根本不存在相应的键:http://3v4l.org/DB6p3#v430
【讨论】:
在哪种语言中捕获""
会导致 null 或空字符串?
@Cozzamara 在第一种情况下,空匹配不被捕获。
哪个引擎? Perl 和 SED do 都通过两种模式捕获空字符串
谢谢,我从来没有意识到不匹配的组会导致 undefined
而不是空字符串(因为我总是只检查真实性)以上是关于正则表达式的区别: (\w+)?和 (\w*)的主要内容,如果未能解决你的问题,请参考以下文章