Project

General

Profile

Bug #9457

Regexp: when using subexpression calls, returned match groups seem wrong

Added by dstosik (David Stosik) about 6 years ago. Updated about 6 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]
[ruby-core:60168]

Description

Hello,

Here are a two examples:

/(Tarzan|Jane) loves (\g<1>)/.match("Tarzan loves Jane").to_a
#=> ["Tarzan loves Jane", "Jane", "Jane"]
# Expected: ["Tarzan loves Jane", "Tarzan", "Jane"]

(http://rubular.com/r/We2x4XNB2l)

/(?<name>(Tarzan|Jane)) loves (\g<name>)/.match("Tarzan loves Jane").to_a
#=> ["Tarzan loves Jane", "Jane"]
# Expected: ["Tarzan loves Jane", "Tarzan", "Jane"]

(http://rubular.com/r/1e3oevc1Yg)

Unless I'm wrong on the results I'm expecting, I think this is a bug.

Thanks for your help,

David

Updated by akr (Akira Tanaka) about 6 years ago

  • Status changed from Open to Rejected

I think it is not a bug.

The subexpression, (Tarzan|Jane), matches twice: "Tarzan" and "Jane".
So the last matched string, "Jane", is recorded in the match object.

Consider following.

% ruby -e 'p /((Tarzan|Jane)) loves (\g<2>)/.match("Tarzan loves Jane")'
#<MatchData "Tarzan loves Jane" 1:"Tarzan" 2:"Jane" 3:"Jane">
% ruby -e 'p /(?<subj>(?<name>Tarzan|Jane)) loves (?<obj>\g<name>)/.match("Tarzan loves Jane")'
#<MatchData "Tarzan loves Jane" subj:"Tarzan" name:"Jane" obj:"Jane">

Also available in: Atom PDF