2011-02-13 25 views
6

Lütfen cehaletimi affedin, Ruby'ye yeni oldum.Ruby: Birden çok dizinde birden çok dosya arasında normal ifadeyi arama

str = File.read('example.txt') 
match = str.scan(/[0-9A-Za-z]{8,8}/) 

puts match[1] 

Ben birden fazla dosya ve dizinleri

pattern = "hello" 

Dir.glob('/home/bob/**/*').each do |file| 
    next unless File.file?(file) 
     File.open(file) do |f| 
      f.each_line do |line| 
       puts "#{pattern}" if line.include?(pattern) 
     end 
    end 
end 

statik ifadeyi aramak için biliyorum:

Ben normal bir ifade ile bir dize, hatta tek bir dosya aramak için biliyorum Regexp'imi çoklu dosya ve dizinlere karşı nasıl kullanacağımı anlayamıyorum. Her türlü yardım çok takdir edilmektedir.

cevap

5

Eh, oldukça yakınsınız. ne zaman Şimdi

pattern = Regexp.new("hello") 
# or use first argument for regexp 
pattern = Regexp.new(ARGV[0]) 

:

pattern = /hello/ 

Yoksa (komut satırında geçirilen gibi) String bir RegExp yapmaya çalışıyoruz, sen deneyebilirsiniz: İlk desene Normal ifade nesnesi yapmak arıyor, line bir String. Modelinizin deseniyle eşleşmesini sağlamak için match veya scan'u kullanabilirsiniz.

f.each_line do |line| 
    if line.match(pattern) 
    puts $0 
    end 
    # or 
    if !(match_data = line.match(pattern)).nil? 
    puts match_data[0] 
    end 
    # or to see multiple matches 
    unless (matches = line.scan(pattern)).empty? 
    p matches 
    end 
end 
+0

Yanıt için çok teşekkür ederim. Regex arama sonuçlarının ne olduğunu gösterme konusunda problem yaşıyorum. "Puts" komutunun regexp ile eşleşen verileri doğru olarak göstereceğini varsayar mıyım? – roobnoob

+0

Ah, daha kullanışlı olacağını düşündüğüm gibi çizgiyi yazdırdım. Cevabımı güncelleyeceğim. – wuputah

+0

Bunun için çok teşekkür ederim. Bir "eşleme" alıyorum: UTF-8'de (ArgumentError) geçersiz bayt dizisi. Bunun orijinal sorumu ile ilgisi olmadığını biliyorum. Bu yeni konuyu araştıracağım. Orijinal sorumu cevapladığınız için teşekkür ederiz! – roobnoob

İlgili konular