"John Johnson" <jj5412 / earthlink.net> schrieb im Newsbeitrag news:BB0E7D46.4D97%jj5412 / earthlink.net... > While all the regexp experts have their ears perked up: > > Is there a way to match multiple words in a sentence in any order with one > regexp? I.e. I have a configuration file that looks like so: > > label lines 12 > the label is 40 characters wide > print field piece name at row 2 column 23 > print field piece description at column 13 and row 3 > > (Following Pragmatic Programmer's tips #20, 37, 52, 68, and 69 :-)) > > I would like to extract the parameter names and values whether row is before > column (for instance), or someone wrote 'the number of lines on the label > are 12'. Perhaps I'm being a little to flexible here? You can do conf=<<CONF label lines 12 the label is 40 characters wide print field piece name at row 2 column 23 print field piece description at column 13 and row 3 CONF def extractNumericValue(line, *words) words.each do |word| rx = Regexp.new "\\b#{word}\\b" return false unless rx.match line end m = /\b(-?\d+)\b/.match line return m && m[1] end def extractNumericValues(line, *words) words.each do |word| rx = Regexp.new "\\b#{word}\\b" return false unless rx.match line end result = Hash.new line.scan /\b(\w+)\s+(-?\d+)\b/ do |m| result[ m[0] ]= m[1] end return !result.empty? && result end def extractNumericValues2(line, words) extractNumericValues( line, *words.split( /\s+/ ) ) end conf.each do |line| v = extractNumericValue line, "lines", "label" puts "label lines=#{v}" if v v = extractNumericValues line, "field", "piece", "name" puts "field piece name=#{v.inspect}" if v v = extractNumericValues2 line, "field piece description" puts "field piece description=#{v.inspect}" if v end Cheers robert