Сканирование с помощью Regexp.Union, как использовать переменные с параметрами в union \ b \ ix? - PullRequest
0 голосов
/ 26 августа 2018

Мне нужно заменить жестко закодированные значения 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

1 Ответ

0 голосов
/ 26 августа 2018

Это сработало для меня таким образом, что вы можете передать переменную в регулярное выражение, синтаксис довольно сложный, но он работает !!с подачей всех элементов массива в Union может быть более сложным, если опции различны для каждого элемента.Обратите внимание на использование # и фигурных скобок.

s = ' select /*  aaa Select /*   SElectXXX  ZZZ_SelecT '
regex1 = '\bselect\b'            # | /\bselect\b/ix|(?-mix:myTable))'
regex2 = '\/\*'              
puts  'scan1 ' + s.scan(/#{regex1}/ix).to_s

Хороший вопрос, ничего плохого, все включено.Удачи!Больше хороших трюков здесь введите описание ссылки здесь

, и это также работает для Union, но обратите внимание, что это не парсинг элементов массива, а только фиксированное количество элементов, в данном случае = 2.

regu = Regexp.union(/#{regex2}/, /#{regex1}/ix)
puts  'scanUN ' + s.scan(regu).to_s
#scanUN ["select", "/*", "Select", "/*"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...