From: Paul Mckibbin Date: 2008-03-13T10:41:26+09:00 Subject: Re: String method to take subsections Glenn wrote: > Hi, > > I'm looking for a method for the String class that returns an array of > strings based on two input strings. Regular expressions are your friend here: class String def containedby(startmark='a',endmark='b') self.scan(Regexp.new(startmark+'([^'+endmark+']*)'+endmark)).flatten end end should do what you want. If you want to restrict it to just one character remove the * in ']*)'. > If you had the string 'a1b2' and tried 'a1b2'.method_x('a', 'c') you'd > get nil because 'c' is obviously not in the String that's calling the > method. > > Likewise, if you tried 'a1b2'.method_x('b', 'a') it would also return > nil since there's no string between 'b' and 'a' (so the order matters). > Actually returns [] in both these cases, but I'm sure you can deal with those. Test Listing and output below: ==================================== class String def containedby(startmark='a',endmark='b') self.scan(Regexp.new(Regexp.escape(startmark)+'([^'+Regexp.escape(endmark)+']*)'+Regexp.escape(endmark))).flatten end end TEST='xxxxxa1byyyyya2bzzzzzzz' extracted=TEST.containedby('a','b') puts extracted.inspect extracted=TEST.containedby('a','c') puts extracted.inspect TEST2='b1a2' extracted=TEST2.containedby('a','b') puts extracted.inspect ===================================== ["1", "2"] [] [] -- Posted via http://www.ruby-forum.com/.