Ruby动态填充二维数组
我正在研究分析SQL代码的解析器,以便尝试处理所有的块注释。我提出了通过索引处理正则表达式的解决方案,以查看它是否在注释块内,并为此尝试在下面的代码中填充2维数组,其中第二个元素是文本,比如s。不确定这是否可行。我试过一颗宝石,但失败了。 我的目标是让数组像 全部=[[9,'s'],[19,'s'],[24,'s']] 参考下面的例子。最终目标是大量处理遗留SQL代码。。查找具有特定关键字的活动行。最好的Ruby动态填充二维数组,ruby,Ruby,我正在研究分析SQL代码的解析器,以便尝试处理所有的块注释。我提出了通过索引处理正则表达式的解决方案,以查看它是否在注释块内,并为此尝试在下面的代码中填充2维数组,其中第二个元素是文本,比如s。不确定这是否可行。我试过一颗宝石,但失败了。 我的目标是让数组像 全部=[[9,'s'],[19,'s'],[24,'s']] 参考下面的例子。最终目标是大量处理遗留SQL代码。。查找具有特定关键字的活动行。最好的 x = 'line:xss /* */ /* /* CODE_Comment
x = 'line:xss /* */ /* /* CODE_Comment */ '
puts x
i = -1
all = [[],[]]
while i = x.index('/*',i+1)
do all << i ####<@>>< how to add literal to second element ???
end
puts all
您可以执行以下操作
str = 'line:xss /* */ /* /* CODE_Comment */ '
看。继续之前,让我们重置枚举器:
enum1.rewind
看。其次,
和印刷品
_ = /*, a = []
md = /*, b = 9
a = [[9, "s"]]
_ = /*, a = [[9, "s"]]
md = /*, b = 19
a = [[9, "s"], [19, "s"]]
_ = /*, a = [[9, "s"], [19, "s"]]
md = /*, b = 24
a = [[9, "s"], [19, "s"], [24, "s"]]
我使用了一个下划线作为第一个块变量的占位符,以表示在块计算中不使用它,这是一种常用的约定。为了构造数组,我们需要字符串str中匹配的偏移量。为此,我们首先获取该匹配生成的MatchData实例,请参见,然后使用该方法获取匹配开始的偏移量。最后,我们将所需的2元素数组附加到
Regexp.last\u match的值由全局变量$~,因此该变量有时用于代替Regexp.last\u match。您可以将'all'初始化为[]数组,然后将数组插入其中。没有特殊的初始化需要使它2维。若要制作2d数组,请创建一个1d数组,然后在其中放置一个或多个数组。我不清楚您希望在数组中使用x的哪些位,或者数组中的数字代表什么,但若要在I之后添加“s”,您将执行所有操作。问题解决了。我只需要处理正则表达式每次出现的索引,它应该是每个失败的行。它不是一个足够精确的错误描述,我们无法帮助您。什么不起作用?它怎么不起作用?你的代码有什么问题?你收到错误信息了吗?错误消息是什么?你得到的结果不是你期望的结果吗?你期望得到什么样的结果?为什么?你会得到什么样的结果?两者有什么不同?你观察到的行为是否不是期望的行为?期望的行为是什么?为什么?观察到的行为是什么?它们有什么不同?
enum1.next #=> "/*"
enum1.next #=> "/*"
enum1.next #=> "/*"
enum1.next #=> StopIteration (iteration reached an end)
enum1.rewind
enum2 = enum1.with_object([])
#=> #<Enumerator: #<Enumerator: "line:xss /* */ /* /* CODE_Comment */ "
# :gsub(/\/\*/)>:with_object([])>
enum2.next #=> ["/*", []]
enum2.next #=> ["/*", []]
enum2.next #=> ["/*", []]
enum2.next #=> StopIteration (iteration reached an end)
enum2.rewind
enum2.each do |_,a|
puts "\n_ = #{_}, a = #{a}"
md = Regexp.last_match
b= md.begin(0)
puts "md = #{md}, b = #{b}"
a << [b, 's']
puts "a = #{a}"
end
#=> [[9, "s"], [19, "s"], [24, "s"]]
_ = /*, a = []
md = /*, b = 9
a = [[9, "s"]]
_ = /*, a = [[9, "s"]]
md = /*, b = 19
a = [[9, "s"], [19, "s"]]
_ = /*, a = [[9, "s"], [19, "s"]]
md = /*, b = 24
a = [[9, "s"], [19, "s"], [24, "s"]]