I do not understand behavior of positive look arounds in Ruby:
chunked_data = "DIVex>##ECHO=b698fd4cc1ea4c7a4b5c4e1d1c402911##"
p $& if chunked_data =~ /(?=DIVex)DI/ # => DI
However,
chunked_data = "<DIVex>##ECHO=b698fd4cc1ea4c7a4b5c4e1d1c402911##"
p $& if chunked_data =~ /(?=<DIVex)DI/ # => nil
does < gets treated as special character inside (?= ..) ?
···
--
There was only one Road; that it was like a great river: its springs
were at every doorstep, and every path was its tributary.
No, but lookahead assertions are zero-width, so if your assertion
matches <DIV, your cursor is still before the <, and thus won't match
DI. p $& if chunked_data =~ /(?=<DIVex)<DI/ works fine.
martin
···
On 12/5/06, hemant <gethemant@gmail.com> wrote:
I do not understand behavior of positive look arounds in Ruby:
chunked_data = "DIVex>##ECHO=b698fd4cc1ea4c7a4b5c4e1d1c402911##"
p $& if chunked_data =~ /(?=DIVex)DI/ # => DI
However,
chunked_data = "<DIVex>##ECHO=b698fd4cc1ea4c7a4b5c4e1d1c402911##"
p $& if chunked_data =~ /(?=<DIVex)DI/ # => nil
does < gets treated as special character inside (?= ..) ?
There are a few types of "lookarounds": positive lookahead, negative lookahead, positve lookbehind, negative look behind.
To use positive lookbehind, you would use (?<=...). Ruby might be interpreting ?=< as ?<=. Try escaping the < by adding a \ before it.
···
----- Original Message -----
From: hemant
Date: Monday, December 4, 2006 11:29 pm
Subject: doubt with positive lookaround
To: ruby-talk@ruby-lang.org (ruby-talk ML)
I do not understand behavior of positive look arounds in Ruby:
chunked_data = "DIVex>##ECHO=b698fd4cc1ea4c7a4b5c4e1d1c402911##"
p $& if chunked_data =~ /(?=DIVex)DI/ # => DI
However,
chunked_data = "##ECHO=b698fd4cc1ea4c7a4b5c4e1d1c402911##"
p $& if chunked_data =~ /(?= nil
does < gets treated as special character inside (?= ..) ?
--
There was only one Road; that it was like a great river: its springs
were at every doorstep, and every path was its tributary.
The regex engine in Ruby 1.8 does not support look-behind assertions. The regex engine in 1.9, Oniguruma, does.
James Edward Gray II
···
On Dec 5, 2006, at 12:58 PM, danfinnie@optonline.net wrote:
There are a few types of "lookarounds": positive lookahead, negative lookahead, positve lookbehind, negative look behind.
To use positive lookbehind, you would use (?<=...). Ruby might be interpreting ?=< as ?<=. Try escaping the < by adding a \ before it.
Yup James I am aware of that. I was blind enough to not see my silly mistake.
Thanks
···
On 12/6/06, James Edward Gray II <james@grayproductions.net> wrote:
On Dec 5, 2006, at 12:58 PM, danfinnie@optonline.net wrote:
> There are a few types of "lookarounds": positive lookahead,
> negative lookahead, positve lookbehind, negative look behind.
>
> To use positive lookbehind, you would use (?<=...). Ruby might be
> interpreting ?=< as ?<=. Try escaping the < by adding a \ before it.
The regex engine in Ruby 1.8 does not support look-behind
assertions. The regex engine in 1.9, Oniguruma, does.
--
There was only one Road; that it was like a great river: its springs
were at every doorstep, and every path was its tributary.