2015-06-28 2 views
0

Кто-нибудь знает, есть ли способ использовать массив в регулярном выражении? предположим, я хочу узнать, содержит ли somefile.txt один из элементов массива. Очевидно, что код ниже не работает, но есть ли что-то подобное, что работает?Использование массивов в регулярных выражениях?

array = [thing1 thing2 thing3] 
file = File.open("somefile.txt") 

file.each_do |line| 
if /array/.match(line) 
puts line 
end 

В принципе у меня есть файл, который содержит список слов, которые мне нужно использовать в качестве поисковых терминов в другой большой файл, и я хотел бы, чтобы избежать чего-то вроде этого:

($somefile =~ /(thing1|thing2|thing3)/) 
+0

Вашей постановка вопроса неверна. Вы не хотите использовать массив в регулярном выражении, вы хотите выразить альтернативы в регулярном выражении (который задается как массив). – sawa

+0

Но я думаю, что я хочу использовать массив? В основном у меня есть файл, содержащий список слов, которые мне нужно использовать в качестве поисковых запросов в другом большом файле. –

ответ

0

Использование:

x = ['qwe', 'asd', 'zxc'] 
file = File.open("somefile.txt") 
regexp = /(#{x.join '|'})/ 
file.each_do |line| 
    puts line if regexp.match(line) 
end 
+0

Спасибо, я гораздо ближе! Однако, я думаю, что здесь что-то не хватает. Когда я запускаю это, он ничего не выводит, он просто переходит к следующей командной строке, поэтому я думаю, что это сработало, но ничего не напечатало? –

+0

ах да, вам нужно закрыть 'if', позвольте мне отредактировать – juanpastas

4

Вы можете использовать Regexp.union, он возвращает Regexp, который соответствует любому из данного регулярного выражения. Узоры аргумента могут быть либо String или Regexp:

Regexp.union(%w(thing1 thing2 thing3)) 
#=> /thing1|thing2|thing3/ 

или

Regexp.union(/thing1/, /thing2/, /thing3/) 
#=> /(?-mix:thing1)|(?-mix:thing2)|(?-mix:thing3)/ 
+0

Могу ли я использовать содержимое моего массива для заполнения этого regexp.union каким-то образом? –

+0

@RachaelHardison Вы имеете в виду 'Regexp.union (array)'? Конечно, попробуйте. –

Смежные вопросы