Oniguruma: Different result in ruby 1.9.1 and 1.8.7

  • Thread starter Miguel Teixeira
  • Start date
M

Miguel Teixeira

Hi,

I have the following regular expression created in ruby 1.9.1:

/(?:(?:\$(?'name1'[\w\s\']+)(?:(?'name2'(?:created|developed)[\w\s]+)(?name3'(?:in|at)[\w\s]+)))|(?:\$(?'name1'[\w\s\']+)(?'name2':)?created|developed)[\w\s]+))|(?:\$(?'name1'[\w\s\']+)(?'name3'(?:in|at)[\w\s]+)))(?:\.(?'name4'[\w\s]+))?/.match(str)

To use Oniguruma i have installed the following gem:
http://github.com/geoffgarside/oniguruma/tree/master

(also tried with this solution:
http://www.goodbyehelicopter.com/2008/02/20/install-oniguruma-on-os-x/)

After the installation of Oniguruma i have created the following regular
expression in ruby 1.8.7:
Oniguruma::ORegexp.new('(?:(?:\$(?\'name1\'[\w\s\']+)(?:(?\'name2\'(?:created|developed)[\w\s]+)(?\'name3\'(?:in|at)[\w\s]+)))|(?:\$(?\'name1\'[\w\s\']+)(?\'name2\':)?created|developed)[\w\s]+))|(?:\$(?\'name1\'[\w\s\']+)(?\'name3\'(?:in|at)[\w\s]+)))(?:\.(?\'name4\'[\w\s]+))?').match(str)

My problem is that the result in ruby 1.8.7 is different from the result
in 1.9.1.
Anyone has an idea about what's going on?

I also tried to substitute ?\'name1\' with ?<name1>


Thanks,
 
A

Aaron Patterson

Hi,

I have the following regular expression created in ruby 1.9.1:

/(?:(?:\$(?'name1'[\w\s\']+)(?:(?'name2'(?:created|developed)[\w\s]+)
(?name3'(?:in|at)[\w\s]+)))|(?:\$(?'name1'[\w\s\']+)(?'name2':)?
created|developed)[\w\s]+))|(?:\$(?'name1'[\w\s\']+)(?'name3'(?:in|
at)[\w\s]+)))(?:\.(?'name4'[\w\s]+))?/.match(str)

To use Oniguruma i have installed the following gem:
http://github.com/geoffgarside/oniguruma/tree/master

(also tried with this solution:
http://www.goodbyehelicopter.com/2008/02/20/install-oniguruma-on-os-
x/)

After the installation of Oniguruma i have created the following
regular
expression in ruby 1.8.7:
Oniguruma::ORegexp.new('(?:(?:\$(?\'name1\'[\w\s\']+)(?:(?
\'name2\'(?:created|developed)[\w\s]+)(?\'name3\'(?:in|at)[\w\s]+)))|
(?:\$(?\'name1\'[\w\s\']+)(?\'name2\':)?created|developed)[\w\s]+))|
(?:\$(?\'name1\'[\w\s\']+)(?\'name3\'(?:in|at)[\w\s]+)))(?:\.(?
\'name4\'[\w\s]+))?').match(str)

My problem is that the result in ruby 1.8.7 is different from the
result
in 1.9.1.
Anyone has an idea about what's going on?

I also tried to substitute ?\'name1\' with ?<name1>

That expression is rather long. Have you tried reducing the regular
expression to the smallest possible case that will make it break?
 
R

Robert Klemme

2009/9/4 Miguel Teixeira said:
I have the following regular expression created in ruby 1.9.1:

/(?:(?:\$(?'name1'[\w\s\']+)(?:(?'name2'(?:created|developed)[\w\s]+)(?na= me3'(?:in|at)[\w\s]+)))|(?:\$(?'name1'[\w\s\']+)(?'name2':)?created|develop=
ed)[\w\s]+))|(?:\$(?'name1'[\w\s\']+)(?'name3'(?:in|at)[\w\s]+)))(?:\.(?'na=
me4'[\w\s]+))?/.match(str)

To use Oniguruma i have installed the following gem:
http://github.com/geoffgarside/oniguruma/tree/master

(also tried with this solution:
http://www.goodbyehelicopter.com/2008/02/20/install-oniguruma-on-os-x/)

After the installation of Oniguruma i have created the following regular
expression in ruby 1.8.7:
Oniguruma::ORegexp.new('(?:(?:\$(?\'name1\'[\w\s\']+)(?:(?\'name2\'(?:cre= ated|developed)[\w\s]+)(?\'name3\'(?:in|at)[\w\s]+)))|(?:\$(?\'name1\'[\w\s=
\']+)(?\'name2\':)?created|developed)[\w\s]+))|(?:\$(?\'name1\'[\w\s\']+)(?=
\'name3\'(?:in|at)[\w\s]+)))(?:\.(?\'name4\'[\w\s]+))?').match(str)

My problem is that the result in ruby 1.8.7 is different from the result
in 1.9.1.
Anyone has an idea about what's going on?

What differences did you observe? Against which text did you match?

To simplify your tests I would create both regular expressions via the
string method. Then you can be sure to use the same string and not
fall culprit of some conversion or typing errors.

Kind regards

robert

--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
 
M

Miguel Teixeira

Hi robert,

The problem is that in ruby 1.8.7 is impossible (?) to use string method
with oniguruma (the default regular expression engine is different).

The differences that i observe is the match's for the cases where the
(created|developed) and (in|at) groups should be matched.
 
R

Robert Klemme

The problem is that in ruby 1.8.7 is impossible (?) to use string method
with oniguruma (the default regular expression engine is different).

Apparently you are not getting my point - maybe I wasn't clear enough.
I suggested to *create* the regular expression via a String, i.e.
Regexp.new(s) and Oniguruma::ORegexp.new(s).
The differences that i observe is the match's for the cases where the
(created|developed) and (in|at) groups should be matched.

What difference do you observe? You are not really providing much
information to answer your question. You could do yourself a favor and
simply post a script or IRB session showing the different behavior.

http://catb.org/~esr/faqs/smart-questions.html

Cheers

robert
 
M

Miguel Teixeira

Hi robert,

I get the same result when trying the match via Regexp.new.


Maybe the version of origuruma is different, i will try to create a
different regular expression (more simple) this times using ruby 1.8.7
regular expression engine.

Thanks for the help.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,020
Latest member
GenesisGai

Latest Threads

Top