|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
[Note: parts of this message were removed to make it a legal post.]
Thanks for your , guys. All three suggestions are great. It seems to me that returning an empty array instead of nil is actually better. Glenn ----- Original Message ---- From: Paul Mckibbin <pmckibbin@gmail.com> To: ruby-talk ML <ruby-talk@ruby-lang.org> Sent: Wednesday, March 12, 2008 9:41:26 PM 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/. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Glenn wrote:
> Thanks for your , guys. All three suggestions are great. > > It seems to me that returning an empty array instead of nil is actually > better. I'd be inclined to agree, although some might argue that a test for nil is easier. class String def containedby(startmark='a',endmark='b') x=self.scan(Regexp.new(Regexp.escape(startmark)+'([^'+Regexp.escape(endmark)+']*)'+Regexp.escape(endmark))).flatten x.size > 0 ? x : nil end end would return the error conditions as nil. Mac -- Posted via http://www.ruby-forum.com/. |
|
![]() |
| Outils de la discussion | |
|
|