[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Regexp.union - set option all patterns case insensitive

John Honovich

3/17/2008 6:50:00 PM

I want to pull a list of terms and use them to scan documents to
determine if any of those words are present.

Let's say fruits = ["apples","oranges","grapes"].

I do Regexp.union(*fruits). This returns /apples|oranges|grapes/ which
is good.

Now I want this pattern to be case insensitive, i.e. -
/apples|oranges|grapes/i

Docs say I can set each argument to case insensitive and then call union
e.g. - Regexp.union(/dogs/, /cats/i) #=>
/(?-mix:dogs)|(?i-mx:cats)/


I have been doing fruits.map!{|fruit| Regexp.new(fruit,
Regexp::IGNORECASE)}; Regexp.union(*fruits)

This seems to work. Is there any better or cleaner way to do this?

Thanks,

John
--
Posted via http://www.ruby-....

2 Answers

Chris Shea

3/17/2008 7:12:00 PM

0

On Mar 17, 12:49 pm, John Honovich <jhonov...@gmail.com> wrote:
> I want to pull a list of terms and use them to scan documents to
> determine if any of those words are present.
>
> Let's say fruits = ["apples","oranges","grapes"].
>
> I do Regexp.union(*fruits). This returns /apples|oranges|grapes/ which
> is good.
>
> Now I want this pattern to be case insensitive, i.e. -
> /apples|oranges|grapes/i
>
> Docs say I can set each argument to case insensitive and then call union
> e.g. - Regexp.union(/dogs/, /cats/i) #=>
> /(?-mix:dogs)|(?i-mx:cats)/
>
> I have been doing fruits.map!{|fruit| Regexp.new(fruit,
> Regexp::IGNORECASE)}; Regexp.union(*fruits)
>
> This seems to work. Is there any better or cleaner way to do this?
>
> Thanks,
>
> John
> --
> Posted viahttp://www.ruby-....

I don't know how much better this is, but you could union first, then
add the case-insensitivity:

fruits = ["apples","oranges","grapes"]
r = Regexp.union(*fruits)
r = Regexp.new(r.source, Regexp::IGNORECASE) # => /apples|oranges|
grapes/i

HTH,
Chris

Boson

4/10/2008 2:00:00 PM

0

Chris Shea wrote:

> I don't know how much better this is, but you could union first, then
> add the case-insensitivity:
>
> fruits = ["apples","oranges","grapes"]
> r = Regexp.union(*fruits)
> r = Regexp.new(r.source, Regexp::IGNORECASE) # => /apples|oranges|
> grapes/i

This solution works. Thanks.

Looking at the Ruby source, it wouldn't be hard to add an options
parameter to Regexp.union to avoid such re-conversions.