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

P

Pavel Smerk

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.
 
R

Robert Klemme

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,014
Latest member
BiancaFix3

Latest Threads

Top