MatchData matchset and matchtree

I think someone asked about/suggested something like this recently. I
think these two methods would make a pretty good addition to the core
library.

class MatchData

Returns [ pre_match, matchtree, post_match ]. (see matchtree)

md = /(bb)(cc(dd))(ee)/.match “XXaabbccddeeffXX”

md.to_a #=> [“XXaabbccddeeffXX”, “bb”, “ccdd”, “dd”, “ee”]

md.matchset #=> [“XXaa”, [[“bb”], [“cc”, [“dd”]], “ee”],

“ffXX”]

def matchset
[pre_match, matchtree, post_match]
end

An alternate to #to_a which returns the matches in

order corresponding with the regular expression.

md = /(bb)(cc(dd))(ee)/.match “XXaabbccddeeffXX”

md.to_a #=> [“XXaabbccddeeffXX”, “bb”, “ccdd”, “dd”, “ee”]

md.matchtree #=> [[“bb”], [“cc”, [“dd”]], “ee”]

def matchtree(index=0)
ret=[]
b, e=self.begin(index), self.end(index)
while (index+=1)<=length
if index==length || (bi=self.begin(index))>=e
# we are finished, if something is left, then add it
ret << string[b, e-b] if e>b
break
else
if bi>=b
ret << string[b, bi-b] if bi>b
ret << matchtree(index)
b=self.end(index)
end
end
end
return ret
end

end

Hi,

Moved to ruby-core.

At Mon, 16 Apr 2007 03:01:46 +0900,
Trans wrote in [ruby-talk:248025]:

I think someone asked about/suggested something like this recently. I
think these two methods would make a pretty good addition to the core
library.

Seems nice, but I’m not sure if the names are best for them.
Any other idea?

On 4/18/07, Nobuyoshi N. [email protected] wrote:

Seems nice, but I’m not sure if the names are best for them.
Any other idea?

Can’t think of anything better, myself. But certainly feel free to
name them whatever seems more appropriate.

Thanks,
T.