From: phasis@... Date: 2014-04-11T10:21:12+00:00 Subject: [ruby-core:61963] [ruby-trunk - Bug #9728] Regexp bug 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/