Issue #9728 has been updated by Heesob Park.


~~~
I found this issue is related with the ONIG_DONT_OPTIMIZE macro.

If I insert "#define ONIG_DONT_OPTIMIZE" in regint.h, the regexp works like Ruby 1.9.3.

before define:

C:\work\ruby-2.2.0-r45349>miniruby -ve 'p "ab"=~/(?!^a).*b/;'
ruby 2.2.0dev (2014-03-16 trunk 45349) [x64-mswin64_120]
nil

after define:

C:\work\ruby-2.2.0-r45349>miniruby -ve 'p "ab"=~/(?!^a).*b/;'
ruby 2.2.0dev (2014-03-16 trunk 45349) [x64-mswin64_120]
1
~~~


----------------------------------------
Bug #9728: Regexp bug
https://bugs.ruby-lang.org/issues/9728#change-46158

* Author: Tsuyoshi Sawada
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: Ruby 2.0
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
As reported in StackOverflow (http://stackoverflow.com/questions/23004527) (with a wrong expectation), the following regex pattern with the `*` operator does not match.

    "ab" =~ /(?!^a).*b/
    # => nil

When `?` is used instead, it seems to match correctly:

    "ab" =~ /(?!^a).?b/
    # => 1

According to the original reporter of the linked site, this does not happen in Ruby 1.9.3.



-- 
https://bugs.ruby-lang.org/