#!/usr/local/bin/ruby # -*- mode: ruby -*- # $Id: regexmatch.ruby,v 1.11 2001/07/02 04:26:31 doug Exp $ # http://www.bagley.org/~doug/shootout/ re = Regexp.new( '(?:^|[^\d\(])' + # must be preceeded by non-digit '(?:\((\d\d\d)\)|(\d\d\d))' + # match 1 or 2: area code is 3 digits '[ ]' + # area code followed by one space '(\d\d\d)' + # match 3: prefix of 3 digits '[ -]' + # separator is either space or dash '(\d\d\d\d)' + # match 4: last 4 digits '\D' # must be followed by a non-digit ) NUM = Integer(ARGV[0] || 1) phones = STDIN.readlines count = m = line = iter = 0 for iter in 1..NUM for line in phones if m = re.match(line) m1 = m[1]; if m1 == "" m1 = m[2]; end num = '(' + m1 + ') ' + m[3] + '-' + m[4]; if iter == NUM count += 1 puts "#{count}: #{num}" end end end end