2015-05-20 5 views
1

Я создал скрипт Ruby, который использует регулярное выражение для вырезания строки из файла и вставки его в новый файл. Эта часть отлично работает. Теперь я хочу ввести регион в консоль, и вывод должен показать мне только область, в которую я ввел ранее.Корпус выключателя с регулярным выражением в Ruby?

Например, я ищу этот «ipc-abc-01» и тип abc, теперь он должен показать мне все записи с помощью abc.

found = 0 
words = [] 

puts "Please enter a word to search the list" 
input = gets.chomp 

#Open text file in read mode 
File.open("list.txt", "r+") do |f| 

    f.each do |line| 
    if m = line.match(/\b#{input}\b/i) 
     puts "#{m[0]} " 
     # ... etc. 
     found = 1 
    end 
    end 
end 
+0

Он не найдет 'ИПК-zhb790-р-уш-01', потому что регулярное выражение' \ bzhb \ b' так он ищет границу слова после 'zhb', но вместо этого находит' 7'. –

ответ

0

Это то, что вы искали? это поиск все строки пользователя, данные ввода в форме регулярных выражений, который чувствителен к регистру ..

words = [] 

print "Please enter a word to search the braslist: " 
input = gets.chomp 

#Open text file in read mode 
File.open("braslist.txt", "r+") do |f| 
    f.each do |line| 
     words += line.split(" ").grep(/#{input}/i) 
    end 
end 

puts "#{words.length} words found!" 
puts words 
+0

Также вы можете использовать массив для хранения других критериев поиска, а не только одного из пользовательского ввода. Затем вставьте каждый цикл, который будет grep каждый критерий поиска из массива. – emvee

0

Чтобы соответствовать все слова, содержащие zhb в:
zhb440 zhb440 izhh550 ipc-zhb790-r-br-01
вы можете использовать:

\S*?(?:zhb)\S* 

if line =~ /\S*?(?:zhb)\S*/ 
    match = $~[1] 
else 
    match = "" 
end 

See the DEMO

+0

ок спасибо, но я получил также что-то вроде НЗП или SGL и больше, как я могу фильтровать их без если петля для каждого слова – orcaninja

+0

я получил что-то подобное в текстовом файле zhb440 zhb440 izhh550 и им, глядя на ЖБ и всего хотите распечатать zhb's out, как я могу это сделать? – orcaninja

+0

Это очень тяжелый Perl-акцентированный Ruby. Более рубиновым решением будет 'match = line [/.../]. To_s', который избегает много вещей' if', '= ~' и bizarro '$ ~'. – tadman

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