在Ruby(PCRE)中,是否可以对捕获的十进制值使用反向引用来定义重复长度?
/^(\d+),.{\1}/.match('4,abcdefgh') # Should match '4,abcd'
上面的代码只返回nil
(找不到匹配项)。
答案 0 :(得分: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"]
答案 2 :(得分:0)
您可以使用两个正则表达式:
str = '4,abcdefgh'
str =~ /\A(\d+,)/
str[0,$1.size+$1.to_i]
#=> "4,abcd"