Replacing Multiple Patterns in a Single Pass : String class Extension « String « Ruby

Home
Ruby
1.ActiveRecord
2.Array
3.CGI
4.Class
5.Collections
6.Database
7.Date
8.Design Patterns
9.Development
10.File Directory
11.GUI
12.Hash
13.Language Basics
14.Method
15.Network
16.Number
17.Rails
18.Range
19.Reflection
20.Statement
21.String
22.Threads
23.Time
24.Tk
25.Unit Test
26.Windows Platform
27.XML
Ruby » String » String class Extension 




Replacing Multiple Patterns in a Single Pass


class String
  def mgsub(key_value_pairs=[].freeze)
    regexp_fragments = key_value_pairs.collect |k,v| k }
    gsub(Regexp.union(*regexp_fragments)) do |match|
      key_value_pairs.detect{|k,v| k =~ match}[1]
    end
  end
end

"GO HOME!".mgsub([[/.*GO/i, 'Home'], [/home/i, 'is where the heart is']])
# => "Home is where the heart is!"

"Here is number #123".mgsub([[/[a-z]/i, '#'][/#/, 'P']])
# => "#### ## ###### P123"
"between".mgsub([[/ee/, 'AA'], [/e/, 'E']])      # Good code
# => "bEtwAAn"

 














Related examples in the same category
1.write an extension to the String class to provide it
2.Add method to system type
3.Processing a String One Word at a Time by adding a method to string class
4.Writing an Inherited Class
5.Override the method from String Class
6.Regular expression based comparison
7.String translation
8.convert string to binary number
9.Removes first character from self and returns it, changing self
10.Adds last character of provided string to front of self
11.Pops last character off self and returns it, changing self
12.Pushes first character of provided string onto end of self
13.Rotate left
14.Rotate right
15.Shifts first word off of self and returns; changes self
16.Adds provided string to front of self
17.Pops and returns last word off self; changes self
18.Pushes provided string onto end of self
19.Get acronym
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.