From: Robert Klemme Date: 2013-04-19T19:25:59+09:00 Subject: Re: Match against multiple patterns problem --047d7b675db011d9d504dab425ae Content-Type: text/plain; charset=ISO-8859-1 On Thu, Apr 18, 2013 at 8:37 PM, Joel Pearson wrote: > How about this? > > def test(s) > return ['1',''] if !s.is_a?(String) || s.empty? > case s > when /^([^\W_]+)/ > ['a', $1] > when /^(\s+)/ > ['s', $1] > when /^([[:cntrl:]]+)/ > ['c', $1] > when /^([[:punct:]_]+)/ > ['p', $1] > when /^([^\w\s[:cntrl:][:punct:]]+)/ > ['r', $1] > end > end > I prefer a more OO approach: Tests = [ lambda {|s| (!(String === s) || s.empty?) and ['1', '']}, lambda {|s| /^([^\W_]+)/ =~s and ['a', $1]}, lambda {|s| /^(\s+)/ =~s and ['s', $1]}, ] def test(s) Tests.each do |t| r = t[s] and return r end raise "No match!" end Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/ --047d7b675db011d9d504dab425ae Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable



On Thu, Apr 18, 2013 at 8:37 PM, Joel Pearson <= ;lists@ruby-forum= .com> wrote:
How about this?

def test(s)
=A0 return ['1',''] if !s.is_a?(String) || s.empty?
=A0 case s
=A0 when /^([^\W_]+)/
=A0 ['a', $1]
=A0 when /^(\s+)/
=A0 ['s', $1]
=A0 when /^([[:cntrl:]]+)/
=A0 ['c', $1]
=A0 when /^([[:punct:]_]+)/
=A0 ['p', $1]
=A0 when /^([^\w\s[:cntrl:][:punct:]]+)/
=A0 ['r', $1]
=A0 end
end

I prefer a more OO approach:

Tests =3D [
=A0 lambda {|s| (!(String =3D=3D=3D s) |= | s.empty?) and ['1', '']},
=A0 lambda {|s| /^([^\W_]+)/ =3D~s and [&#= 39;a', $1]},
=A0 lambda {|s| /^(\s+)/ = =3D~s and ['s', $1]},
]
=

def test(s)
=A0 Tests.each do |t|
=A0= =A0 r =3D t[s] and return r
=A0 end<= /div>

=A0 raise "No match!"<= /div>
end

Kind regards

robert

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/=
--047d7b675db011d9d504dab425ae--