【问题标题】:Regex difference: (\w+)? and (\w*)正则表达式的区别: (\w+)?和 (\w*)
【发布时间】:2012-12-31 15:38:09
【问题描述】:

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

看起来一样,不是吗?

【问题讨论】:

  • 看起来确实是一样的,除非你关心"" vs. null
  • (\w+)? 似乎很奇怪。你在哪里看到的?请问有外部资源的链接吗?
  • 我在公司项目中看到了(\w+)?

标签: regex difference


【解决方案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 而不是空字符串(因为我总是只检查真实性)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 2011-01-04
  • 1970-01-01
  • 2019-03-05
  • 2013-12-06
相关资源
最近更新 更多