Forum: Ruby oniguruma : can't get it to search for \ (backslash)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
860dc779f0007a35bdcd12b5fc9eb589?d=identicon&s=25 Dean Holdren (Guest)
on 2007-06-26 23:25
(Received via mailing list)
I can't seem to get Oniguruma to look for a single backslash, am I
doing anything wrong here?:

I should be able to escape the single with another:
irb(main):043:0> reg = Oniguruma::ORegexp.new('\\')
ArgumentError: Oniguruma Error: end pattern at escape
        from /usr/local/lib/ruby/site_ruby/1.8/oniguruma.rb:177:in
`old_initialize'
        from /usr/local/lib/ruby/site_ruby/1.8/oniguruma.rb:177:in
`initialize'
        from (irb):43:in `new'
        from (irb):43
        from /usr/local/lib/ruby/site_ruby/1.8/oniguruma.rb:359

For arguments sake, with just one backslash:
irb(main):044:0> reg = Oniguruma::ORegexp.new('\')
irb(main):045:1'
(with just one back-slash, irb sees unfinished syntax)

Same if I use double-quotes:
irb(main):046:0> reg = Oniguruma::ORegexp.new("\\")
ArgumentError: Oniguruma Error: end pattern at escape
        from /usr/local/lib/ruby/site_ruby/1.8/oniguruma.rb:177:in
`old_initialize'
        from /usr/local/lib/ruby/site_ruby/1.8/oniguruma.rb:177:in
`initialize'
        from (irb):46:in `new'
        from (irb):46
        from /usr/local/lib/ruby/site_ruby/1.8/oniguruma.rb:359

Double quotes with just one backslash:
irb(main):047:0> reg = Oniguruma::ORegexp.new("\")
irb(main):048:1"
0158871402c1ecfa57952e8a379cfd10?d=identicon&s=25 Daniel Lucraft (lucraft)
on 2007-06-26 23:51
Dean Holdren wrote:
> I can't seem to get Oniguruma to look for a single backslash, am I
> doing anything wrong here?:
>
> I should be able to escape the single with another:
> irb(main):043:0> reg = Oniguruma::ORegexp.new('\\')
> ArgumentError: Oniguruma Error: end pattern at escape

In a regex literal a backslash is a metacharacter, so you need two
slashes to match a slash: /\\/  But to insert two consecutive slashes in
a string to be compiled into a regex, you need four slashes: "\\\\"

Observe:

irb> reg = Oniguruma::ORegexp.new('\\\\')
=> /\\/

best,
Dan
This topic is locked and can not be replied to.