diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-12-12 06:10:29 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-12-12 06:10:29 +0000 |
commit | 3a637971a2a5939c7306ed7f9acd89689f37f25b (patch) | |
tree | 004181f4823ac8499c30b104bf8c0d575c983047 /re.c | |
parent | 241dced625f9ba8a4071954579778a0940e75179 (diff) |
Enchance MatchData docs [Bug #14450]
From: Victor Shepelev <zverok.offline@gmail.com>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66350 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 52 |
1 files changed, 45 insertions, 7 deletions
@@ -884,13 +884,51 @@ make_regexp(const char *s, long len, rb_encoding *enc, int flags, onig_errmsg_bu /* * Document-class: MatchData * - * <code>MatchData</code> is the type of the special variable <code>$~</code>, - * and is the type of the object returned by <code>Regexp#match</code> and - * <code>Regexp.last_match</code>. It encapsulates all the results of a pattern - * match, results normally accessed through the special variables - * <code>$&</code>, <code>$'</code>, <code>$`</code>, <code>$1</code>, - * <code>$2</code>, and so on. - * + * <code>MatchData</code> encapsulates the result of matching a Regexp against + * string. It is returned by Regexp#match and + * String#match, and also stored in a global variable returned by + * Regexp.last_match + * + * Usage: + * + * url = 'https://docs.ruby-lang.org/en/2.5.0/MatchData.html' + * m = url.match(/(\d\.?)+/) # => #<MatchData "2.5.0" 1:"0"> + * m.string # => "https://docs.ruby-lang.org/en/2.5.0/MatchData.html" + * m.regexp # => /(\d\.?)+/ + * # entire matched substring: + * m[0] # => "2.5.0" + * + * # Working with unnamed captures + * m = url.match(%r{([^/]+)/([^/]+)\.html$}) + * m.captures # => ["2.5.0", "MatchData"] + * m[1] # => "2.5.0" + * m.values_at(1, 2) # => ["2.5.0", "MatchData"] + * + * # Working with named captures + * m = url.match(%r{(?<version>[^/]+)/(?<module>[^/]+)\.html$}) + * m.captures # => ["2.5.0", "MatchData"] + * m.named_captures # => {"version"=>"2.5.0", "module"=>"MatchData"} + * m[:version] # => "2.5.0" + * m.values_at(:version, :module) + * # => ["2.5.0", "MatchData"] + * # Numerical indexes are working, too + * m[1] # => "2.5.0" + * m.values_at(1, 2) # => ["2.5.0", "MatchData"] + * + * == Global variables equivalence + * + * Parts of last <code>MatchData</code> (returned by Regexp.last_match) are also + * aliased as a global variables: + * + * * <code>$~</code> is <code>Regexp.last_match</code>; + * * <code>$&</code> is <code>Regexp.last_match[0]</code>; + * * <code>$1</code>, <code>$2</code> and so on are + * <code>Regexp.last_match[i]</code> (captures by number); + * * <code>$`</code> is <code>Regexp.last_match.pre_match</code>; + * * <code>$`</code> is <code>Regexp.last_match.post_match</code>; + * * <code>$+</code> is <code>Regexp.last_match[-1]</code> (the last capture). + * + * See also "Special global variables" section in Regexp documentation. */ VALUE rb_cMatch; |