Doubt with positive lookaround

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 =~ /(?=<DIVex)DI/ # => nil

does < gets treated as special character inside (?= …) ?

On 12/5/06, hemant [email protected] wrote:

does < gets treated as special character inside (?= …) ?

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, Martin DeMello [email protected] wrote:

does < gets treated as special character inside (?= …) ?

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.

Holy cat…thanks

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: [email protected] (ruby-talk ML)

On Dec 5, 2006, at 12:58 PM, [email protected] 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.

James Edward G. II

On 12/6/06, James Edward G. II [email protected] wrote:

On Dec 5, 2006, at 12:58 PM, [email protected] 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.

Yup James I am aware of that. I was blind enough to not see my silly
mistake.

Thanks