[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Is there some ruby equivalent of perl's /\Q...\E/?

Pavel Smerk

8/15/2006 12:24:00 PM

Hello,

in Perl I have \Q and \E in regexps allowing me to "literally" insert
variable containing special characters:

$ perl -e '$a=".*"; print "a"=~/$a/ || 0, "a"=~/\Q$a\E/ || 0, "\n"'
10
$

i.e., for nonperlists, if I have '.*' string in the variable $a, then
/$a/ is the same as /.*/ (and as such matches 'a'), but /\Q$a\E/ equals
/\.\*/ (and thus does not match 'a'), because all special characters are
treated as preceded by backslash.

Is there something like that in Ruby?

Anyway, why Ruby does not take over whole perl5 RE? Especially
look-behind assertions and \L, \l like special characters?

Thanks,

P.
1 Answer

Robert Klemme

8/16/2006 9:13:00 AM

0

On 15.08.2006 14:23, Pavel Smerk wrote:
> Hello,
>
> in Perl I have \Q and \E in regexps allowing me to "literally" insert
> variable containing special characters:
>
> $ perl -e '$a=".*"; print "a"=~/$a/ || 0, "a"=~/\Q$a\E/ || 0, "\n"'
> 10
> $
>
> i.e., for nonperlists, if I have '.*' string in the variable $a, then
> /$a/ is the same as /.*/ (and as such matches 'a'), but /\Q$a\E/ equals
> /\.\*/ (and thus does not match 'a'), because all special characters are
> treated as preceded by backslash.
>
> Is there something like that in Ruby?

Not as elegant but possible:

11:10:15 [~]: irb
irb(main):001:0> Regexp.quote "."
=> "\\."
irb(main):002:0> Regexp.escape "."
=> "\\."
irb(main):003:0> /o#{Regexp.quote '\\'}b/ =~ "foo\\bar"
=> 2

Note, you may want to use /o modifier for improved efficiency.

> Anyway, why Ruby does not take over whole perl5 RE? Especially
> look-behind assertions and \L, \l like special characters?

1.9 or 2.0 will have a new RX engine AFAIK.

robert