Ruby 为什么不是';我的range正则表达式语法不起作用吗?

Ruby 为什么不是';我的range正则表达式语法不起作用吗?,ruby,regex,Ruby,Regex,我正在使用Ruby 2.4。我想说匹配一个包含3到4个连续数字的字符串。但是我的大括号语法不起作用 2.4.0 :034 > data = "1234" => "1234" 2.4.0 :035 > data =~ /\d{3, 4}/ => nil 什么才是正确的表达方式?删除以下内容中的空格: 如果要匹配仅由3到4位数字组成的整个字符串,请使用 data =~ /\A\d{3,4}\z/ 详细信息: \A-字符串的开头 \d{3,4}-3到4位数字 \z-字

我正在使用Ruby 2.4。我想说匹配一个包含3到4个连续数字的字符串。但是我的大括号语法不起作用

2.4.0 :034 > data = "1234"
 => "1234"
2.4.0 :035 > data =~ /\d{3, 4}/
 => nil

什么才是正确的表达方式?

删除以下内容中的空格:

如果要匹配仅由3到4位数字组成的整个字符串,请使用

data =~ /\A\d{3,4}\z/
详细信息

  • \A
    -字符串的开头
  • \d{3,4}
    -3到4位数字
  • \z
    -字符串结尾

请参阅。

您的正则表达式被解释为

 \d{3,[ ]4} 
这就是它不起作用的原因

删除空间

您的正则表达式正在尝试匹配此值

 \d       # digit
 {        # literal
 3        # literal
 ,        # literal
 [ ]      # class
 4        # literal
 }        # literal 

你的例子对我来说很好??诚然,我的返回0是正确的,因为我的字符串是在测试返回的位置找到的。您可以使用如图所示的锚,但如果您有一个五位数的数字,其中包含一个包含3-4个数字的数字,它将不会与锚一起显示。我将问题理解为“匹配包含3到4个连续数字的完整字符串”。我对我的答案进行了更精确的编辑。使用bos/eos锚点是没有经验的人使用的拐杖。@grail这实际上被解释为匹配一个数字(
\d
),后跟一个文本
{3,4}
,其中空格是一个隐式文本,类似于
{3,\s4}
是一个显式文本。因此,它将匹配一个字符串,如
12{3,4}
,这对regexen非常有帮助。正如@EricDuminil指出的,空白区域的无知不会使一个文本成为限制限定符。它只是意味着这将匹配
12{3,4}
而不是
“1234”=~/(?x:\d{3,4})/#=>?
@sln是的,它不会忽略空白并更改上下文,它将忽略空白,同时保留匹配号和文本的上下文。这不是特定于ruby的PCRE(与Perl兼容的正则表达式),它不能以这种方式工作,python正则表达式也不能。你能给我看一种语言吗?Perl和至少boost::regex。我想是pcre,但我不信任在线测试人员。顺便说一句,我的答案是
您的正则表达式被解释为\d{3,[]4}
。如果你认为那是错的,告诉我。这就是答案吗?这并不能解释为什么op正则表达式不匹配。这里的Wow@sln有点火爆,似乎这部分“去掉了限制量词中的空格:”有点涵盖了这个问题
 \d       # digit
 {        # literal
 3        # literal
 ,        # literal
 [ ]      # class
 4        # literal
 }        # literal