2017-06-22 78 views
-2

我想用ruby的可变范围,但我的代码不工作;红宝石使用范围变量?

ruby -e ' input2=145..170 ; input3= input2.to_s.gsub(/(.*?)\.\.(.*?)/) { 5.upto($2.to_i) { |i| print i, " " } }; print input3' > zzmf 

但我获得5170

这部分失败:

5.upto($2.to_i) { |i| print i, " " } 

我预计:

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 5170 
+0

,如果你要打印一个范围,为什么不使用这样的具有rangeStart = 5; rangeEnd = 170; (rangeStart..rangeEnd).each {| i |打印我,“”}? – N3SS4H

+0

我需要从正则表达式提取数据 – alberto2

+0

5从哪里来?你为什么不用145? –

回答

0

我不认为GSUB是你所需要的,尝试了比赛下面的例子。 [2]得到从正则表达式/(\d+)..(\d+)/施加到“147..170”

5.upto("147..170".match(/(\d+)\.\.(\d+)/)[2].to_i) { |i| print i, " "} 

GSUB旨在用于字符串替换的第二场比赛。 https://ruby-doc.org/core-2.1.4/String.html#method-i-gsub

0

我看到我的代码,我在正则表达式

我用这个迷惑。*?

和正确的就是这个。*

(。*)/

ruby -e ' input2=145..170 ; input3= input2.to_s.gsub(/(.*?)\.\.(.*)/) { 5.upto($2.to_i) { |i| print i, " " } }; print input3' > zzmf 

感谢您的答复