On Thu, Apr 24, 2003 at 08:17:37AM +0900, Bermejo, Rodrigo wrote:
> 
>   ar.select {|e| e =~ /cat|small/ }
> 
> 
>   ar.select {|e| e =~ /cat/ or e != /small/ }
> 
> rubyway?

The latter is not an RE match:

>> "cat" != /z/
?>
(i.e. Ruby will give you an error).

I guess you can write:

ar.select {|e| e =~ /cat/ or not e =~ /small/ }

I don't know if this is the Ruby-way or not, but I do think that Ruby's 
RE's and grep are lacking.  There should be a way to express negation in 
a regular expression, and there should be a way to express several 
conditions in grep.  I guess that the complaint over grep really reduces 
to a complaint over REs.

IMHO one should be able to type some sort of equivalent to 

  "/cat/ and not /small/".

Just like we have "/cat|small/".

I have found myself wishing for something like that more than once.

I can see that the exact syntax I wrote can't be made to work, but we can 
probably find an alternate RE-like syntax.  Perhaps something like:

 /cat|small/  -> true if matches /cat/ or matches /small/
 /cat&small/  -> true if matches /cat/ and matches /small/
 /cat|!small/ -> true if matches /cat/ or does not match /small/
 /cat&!small/ -> true if matches /cat/ and does not match /small/

Just my $0.02

> Krishna Dole wrote:
> 
> >I'm quite taken with ruby, but recently I ran into trouble using grep. I
> >have two questions: first, is there a way to call grep with multiple
> >regexps? For example, if you had
> >	ar = ["cat", "dog", "smallcat"]
> >
> >and you only wanted strings matching  both "small" and "cat", in perl I
> >think you could do something like
> >	ar2 = grep(( /cat/ and /small/ ), ar );
> >
> >but in ruby it seems like you have to call grep twice
> >	ar2 = ar.grep(/cat/).grep(/small/)
> >
> 
>   ar.select {|e| e =~ /cat|small/ }
> 
> 
> >
> >is there a more elegant solution?
> >
> >The second question concerns regexps: how do you indicate that you don't
> >want to match the specified pattern? For example, if I only wanted strings
> >containing "cat" but not containing "small". Once again, I think the perl
> >would look like this:
> >	ar2 = grep(( /cat/ and !/small/ ), ar );
> > 
> >
> 
> 
> >but '!' doesn't work for me in ruby. So far I haven't found anything about
> >this in Pickaxe or on the web.
> >
> >thanks,
> >Krishna
> >
> >
> > 
> >
> 
> -- 
> --------------------------------------------------------
> Rodrigo Bermejo              | rodrigo.bermejo / ps.ge.com  
> IT-Specialist                | 8*879-0644             
> --------------------------------------------------------
> 
> 
> 
> 

-- 
Daniel Carrera
Graduate Teaching Assistant.  Math Dept.
University of Maryland.  (301) 405-5137