2016-02-05 74 views
2

在Ruby(PCRE)中,是否可以使用反向引用捕獲的十進制值來定義重複長度?反向引用定義的正則表達式重複

/^(\d+),.{\1}/.match('4,abcdefgh') # Should match '4,abcd' 

上面的代碼只是返回nil(找不到匹配項)。

+2

的正則表達式沒有得到元。 – ndn

+0

之後以編程方式進行。 – Jan

+1

這可能是一個XY問題。 – sawa

回答

2

您可以使用String#to_i,它給你在開始數:

str = '4,abcdefgh' 
str.match(/^(\d+),.{#{str.to_i}}/) # => #<MatchData "4,abcd" 1:"4"> 
+1

不錯的一個,✅.... –

1

不,你不能這樣做,用正則表達式。如果十進制值的範圍卻是有限的,你可以建立一個包含所有可能的組合,就像一個正則表達式:

'1abcde2abcde3abcde4abcde'.scan(/1.{1}|2.{2}|3.{3}|4.{4}/) 
#=> ["1a", "2ab", "3abc", "4abcd"] 
0

你可以用兩個正則表達式:

str = '4,abcdefgh' 

str =~ /\A(\d+,)/ 
str[0,$1.size+$1.to_i] 
    #=> "4,abcd"