我需要用硬编码的regex.union
值替换我从文件中读取的值。我无法使它起作用,让我们说出\b
字边界。在示例的底部,我有一个很好的案例,并且发现regex1
和regex2
是不同的。如何附加特殊的?-mix:
并使\b
和/ix
工作?
s = '/* aaa SElect /* selectXXX ZZZ_Select '
puts '-------------------- 1 no results here'
RegexData = ['/*', 'select'] # this arrage got values from file
puts 'Regexdata ' + RegexData[0].chomp + ' ' + RegexData[1].chomp
regex1 = Regexp.union(RegexData[0].chomp , RegexData[1].chomp) #add ALL elements from RegexData???
puts 'r1 ' +regex1.to_s
puts 'scan1 ' + s.scan(regex1).to_s
puts '-------------------- 2 works OK for test '
regex2 = Regexp.union(/\/\*/,/\bselect\b/ix,/myTable/)
puts 'r2 ' + regex2.to_s
#(?-mix:(?-mix:\/\*)|(?ix-m:\bselect\b)|(?-mix:myTable))
puts 'scan2 ' + s.scan(regex2).to_s
答案 0 :(得分:1)
这种方式对我有效,您可以将变量传递到regex中,语法非常复杂,但是可以正常工作!如果每个元素的选项不同,则将所有数组元素馈入联合c会更加复杂。注意#和大括号的用法。
s = ' select /* aaa Select /* SElectXXX ZZZ_SelecT '
regex1 = '\bselect\b' # | /\bselect\b/ix|(?-mix:myTable))'
regex2 = '\/\*'
puts 'scan1 ' + s.scan(/#{regex1}/ix).to_s
好问题,没错,全包。祝好运! 更多好的技巧在这里 enter link description here
它也适用于Union,但请注意,它不是解析数组的元素,而只是解析固定数目的元素,在这种情况下为= 2。
regu = Regexp.union(/#{regex2}/, /#{regex1}/ix)
puts 'scanUN ' + s.scan(regu).to_s
#scanUN ["select", "/*", "Select", "/*"]