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 }