Bug #8565

Compiled Regexp comparation bug

Added by Arkadiy Zabazhanov 10 months ago. Updated 10 months ago.

[ruby-core:55627]
Status:Open
Priority:Normal
Assignee:-
Category:-
Target version:-
ruby -v:ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.4.0] Backport:1.9.3: UNKNOWN, 2.0.0: UNKNOWN

Description

2.0.0p195 :001 > Regexp.new('\/') == /\//
=> false

There is no such problem in latest 1.9.3, expression return true

History

#1 Updated by Charlie Somerville 10 months ago

I took a quick look at why this is happening. The equality fails because the source of the two regexps is different:

1.9.3:

Regexp.new('\/').source
=> "\/"
/\//.source
=> "\/"

2.0.0:

Regexp.new('\/').source
=> "\/"
/\//.source
=> "/"

#2 Updated by Cedric Brancourt 10 months ago

Hopefully this is not a bug (or I think it is not).

When you create new regexp with :
%r"\/" and Regexp.new("\/") your quote are the delimiters

when you create regexp with slashes /\// the slashes (/) are your delimiters. Your regexp should end at the second / but fortunately you can escape this one with a backslash.
So your backslash is there used to escape the second one. This mean that your regexp /\// is equal to %r"/"

[6] pry(main)> /\// == %r"/"
=> true

See http://www.ruby-doc.org/core-2.0/Regexp.html#label-Metacharacters+and+Escapes

Also available in: Atom PDF