Report abuse


			
def create_rule(str)
  str.gsub! '.', '\.'
  str.gsub! '[', '(?:'  # change [text] into (?:text)?
  str.gsub! ']', ')?'
  str.gsub! /<.+?>/, '(.+?)'  # change  into (.+?)
  Regexp.new "^#{str}$"
end

rules = [] # Set of Rules

# get Rules
File.open ARGV[0], 'r' do |file|
  file.each_line {|line| rules << create_rule(line)}  
end


unmatched = [] # Array of unmatched lines

# get Data
File.open ARGV[1], 'r' do |file|
  file.each_line do |line|
    matched = false
    rules.each_with_index do |rule, i|
      if (match = rule.match(line)) != nil
        l = match.length
        a = match[1...l]
        a.delete nil
        puts "Rule #{i}: #{a.join ', '}"
        matched = true
        break
      end
    end
    unless matched
      unmatched << line
      puts '# No Match'  
    end
  end  
end

puts '-----'
puts 'Unmatched input:'
unmatched.each { |line| puts line }