From: Joey Zhou Date: 2011-04-25T13:20:32+09:00 Subject: [ruby-core:35874] [Ruby 1.9 - Bug #4609][Open] String#rpartition(regexp) has bug, when regexp contains quantifier Issue #4609 has been reported by Joey Zhou. ---------------------------------------- Bug #4609: String#rpartition(regexp) has bug, when regexp contains quantifier http://redmine.ruby-lang.org/issues/4609 Author: Joey Zhou Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: ruby 1.9.2p180 (2011-02-18) [i386-mingw32] For example: str = "abc123def456ghi" ary1 = str.partition(/\d+/) ary2 = str.rpartition(/\d+/) p ary1 #=> ["abc", "123", "def456ghi"] p ary2 #=> ["abc123def45", "6", "ghi"] What I expected is: ary2 is ["abc123def", "456", "ghi"]. ["abc123def45", "6", "ghi"] may be the result of str.rpartition(/\d/) I have no knowledge about C language, so I can't read the source code. But I guess the matching procedure may be such: Go from the right side of str, attempting to match the regexp: matched_substr? 1 take "i" false go to next char 2 take "h" false go to next char 3 take "g" false go to next char 4 take "6" true("6") go to next char 5 add "5" true("56") go to next char 6 add "4" true("456") go to next char 7 add "f" false exit, return last matched string "456" It seems that the actual procedure exit at step 4, whenever true, and return "6". Maybe it should be a filp-flop condition, when matching become true, go ahead, exit when it becomes false again. -- http://redmine.ruby-lang.org