[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

doubt with positive lookaround

hemant

12/5/2006 4:29:00 AM

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.

4 Answers

Martin DeMello

12/5/2006 4:38:00 AM

0

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 (?= ..) ?

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

hemant

12/5/2006 4:56:00 AM

0

On 12/5/06, Martin DeMello <martindemello@gmail.com> wrote:
> 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 (?= ..) ?
>
> 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 was only one Road; that it was like a great river: its springs
were at every doorstep, and every path was its tributary.

James Gray

12/5/2006 7:05:00 PM

0

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.

James Edward Gray II

hemant

12/6/2006 6:07:00 AM

0

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.


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



Thanks


--
There was only one Road; that it was like a great river: its springs
were at every doorstep, and every path was its tributary.