2017-03-31 42 views
2

我正在使用Ruby 2.4。我想說匹配一個包含3到4個連續數字的字符串。但我的大括號語法不起作用爲什麼我的範圍正則表達式語法不起作用?

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

什麼是正確的方式來說這個?

+0

你舉的例子只是正常的我嗎?無可否認,我的回報是0,這是正確的,因爲我的字符串在那個位置被發現,這就是你的測試返回的結果。你可以使用如圖所示的錨點,但如果你有一個五位數的數字,其中包含一個帶有3-4個數字的數字,它將不會顯示錨點 – grail

+0

嗯,我讀的問題是「match * full * string包含3到4個連續數字「。我編輯我的答案更加精確。 –

+0

使用bos/eos錨點是一個徒手使用的柺杖。 – sln

回答

3

取出limiting quantifier內部的空間:

data =~ /\d{3,4}/ 

如果你想在整個字符串組成的僅3至4位數字匹配,使用

data =~ /\A\d{3,4}\z/ 

詳細

  • \A - 字符串開頭
  • \d{3,4} - 3至4位數字
  • \z - 字符串結尾。

查看Rubular demo

+0

這是答案嗎?這並不能解釋爲什麼op正則表達式不匹配。 – sln

+2

哇@sln在這裏燃燒一點似乎是這部分**「刪除限制量詞內部的空間:」** @種類涵蓋了問題 – engineersmnky

0

你的正則表達式被解釋爲

\d{3,[ ]4} 

這就是爲什麼它不工作。

刪除空格

你的正則表達式嘗試匹配這個

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

@EricDuminil指出,空白無知不會將文字變成限制性限定詞。它只是意味着這將匹配'12 {3,4}'而不是 – engineersmnky

+0

'「1234」=〜/(?x:\ d {3,4})/#=>? – sln

+0

@sln是的,您是正確的不要忽略空白並改變上下文,它會忽略空白,同時保留匹配數和文字的上下文。這不是特定於ruby的[示例](https://regex101.com/r/XM9ybu/1)PCRE(Perl Compatible Regular Expressions)不能以這種方式工作,也不能使用python正則表達式。你能告訴我一種語言嗎? – engineersmnky

相關問題