#1012: Inconsistent Regex behaviour -------------------------------------------+-------------------------------- Reporter: harry@… | Owner: lsansonetti@… Type: defect | Status: new Priority: minor | Milestone: Component: MacRuby | Keywords: -------------------------------------------+-------------------------------- Comment(by watson1978@…): It seems to have to use uregex_findNext() to support \G. {{{ #!diff diff --git a/re.c b/re.c index afbed36..49cbdb8 100644 --- a/re.c +++ b/re.c @@ -785,10 +785,13 @@ rb_reg_matcher_search(VALUE re, VALUE matcher, int pos, bool reverse) return -1; } } - else if (!uregex_find(re_matcher->pattern, pos, &status)) { - // No match. - rb_backref_set(Qnil); - return -1; + else { + uregex_setRegion(re_matcher->pattern, pos, chars_len, &status); + if (!uregex_findNext(re_matcher->pattern, &status)) { + // No match. + rb_backref_set(Qnil); + return -1; + } } // Match found. }}} Test Script: {{{ require 'tempfile' require 'test/unit/assertions.rb' include Test::Unit::Assertions str = "0123456789" assert_equal(["01", "23", "45", "67", "89"], str.scan(/\G\d\d/)) assert_equal("x23456789", str.sub(/\G\d\d/, "x")) assert_equal("xxxxx", str.gsub(/\G\d\d/, "x")) assert_equal(2, str.index(/\G\d\d/, 2)) # not yet #assert_equal(2, str.rindex(/\G\d\d/, 2)) puts :ok }}} I think that many methods can support \G by an above change. but does not supported yet with String#rindex and String#rpartition. -- Ticket URL: <http://www.macruby.org/trac/ticket/1012#comment:3> MacRuby <http://macruby.org/>