[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: String method to take subsections

Glenn

3/13/2008 1:15:00 PM

[Note: parts of this message were removed to make it a legal post.]

Thanks for your help, 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-....





1 Answer

Paul Mckibbin

3/13/2008 8:51:00 PM

0

Glenn wrote:
> Thanks for your help, 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-....