【问题标题】:Ruby Regex * does not match sequence of characters [duplicate]Ruby Regex * 不匹配字符序列[重复]
【发布时间】:2014-09-21 06:18:42
【问题描述】:

为什么这个正则表达式不匹配字符串中的所有bs?

'abbbbbbb'.match(/b*/)
#=> #<MatchData "">

而这样做:

'abbbbbbb'.match(/b+/)
#=> #<MatchData "bbbbbbb">
  • * 的定义是:“星号表示前面有零个或多个元素”。
  • + 的定义是:“加号表示前面有一个或多个元素”。

这两个运算符之间的唯一区别是它们匹配的数量。它们都应该匹配 7 bs。

【问题讨论】:

  • 使用 rubular.com 它有一个正则表达式应用程序,您可以在其中测试正则表达式表达式。尝试将 b 放在 * 之后
  • b* 表示 0 个或多个 bs。不会有2场比赛吗?什么都没有和bbbb?
  • 'abbbbbbb'[/b*/] =&gt; "" 匹配字符串开头的空字符串。 'bbbbbbb'[/b*/] =&gt; "bbbbbbb"。另请注意'abbbbbbb'.scan(/b*/) =&gt; ["", "bbbbbbb", ""]
  • @CarySwoveland,Arup:哇哦,Cary 是对的。我错了。对不起。
  • @sawa 是的,我的也走错了路。 :-) 这是我错过的正则表达式 googly。 ;)

标签: ruby regex


【解决方案1】:

这不是错误,您只是自己回答了问题。

The definition of * is: "The asterisk indicates there is zero or more of the preceding element"

所以/b*/ 匹配如果根本没有 b 字符。

【讨论】:

  • 啊哈!你是对的,谢谢。我一直把它读作“至少 0”和“至少 1”!
  • 好吧,即使这样也是错误的。在那种情况下,我不知道我在想什么:D
猜你喜欢
  • 2017-04-24
  • 1970-01-01
  • 2014-07-24
  • 2017-07-11
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
相关资源
最近更新 更多