[DOC] Enhanced RDoc for MatchData (#5818)

Treats:
    #regexp
    #names
    #size
    #offset
This commit is contained in:
Burdette Lamar 2022-04-18 11:31:30 -05:00 коммит произвёл GitHub
Родитель 96b2b0ee65
Коммит 9d1dd7a9ed
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 64 добавлений и 31 удалений

32
doc/matchdata/offset.rdoc Normal file
Просмотреть файл

@ -0,0 +1,32 @@
Returns a 2-element array containing the beginning and ending
offsets (in characters) of the specified match.
When non-negative integer argument +n+ is given,
returns the starting and ending offsets of the <tt>n</tt>th match:
m = /(.)(.)(\d+)(\d)/.match("THX1138.")
# => #<MatchData "HX1138" 1:"H" 2:"X" 3:"113" 4:"8">
m[0] # => "HX1138"
m.offset(0) # => [1, 7]
m[3] # => "113"
m.offset(3) # => [3, 6]
m = /(т)(е)(с)/.match('тест')
# => #<MatchData "тес" 1:"т" 2:"е" 3:"с">
m[0] # => "тес"
m.offset(0) # => [0, 3]
m[3] # => "с"
m.offset(3) # => [2, 3]
When string or symbol argument +name+ is given,
returns the starting and ending offsets for the named match:
m = /(?<foo>.)(.)(?<bar>.)/.match("hoge")
# => #<MatchData "hog" foo:"h" bar:"g">
m[:foo] # => "h"
m.offset('foo') # => [0, 1]
m[:bar] # => "g"
m.offset(:bar) # => [2, 3]
Related: MatchData#byteoffset, MatchData#begin, MatchData#end.

63
re.c
Просмотреть файл

@ -1101,13 +1101,14 @@ match_init_copy(VALUE obj, VALUE orig)
/*
* call-seq:
* mtch.regexp -> regexp
* call-seq:
* regexp -> regexp
*
* Returns the regexp.
* Returns the regexp that produced the match:
*
* m = /a.*b/.match("abc") # => #<MatchData "ab">
* m.regexp # => /a.*b/
*
* m = /a.*b/.match("abc")
* m.regexp #=> /a.*b/
*/
static VALUE
@ -1125,17 +1126,24 @@ match_regexp(VALUE match)
}
/*
* call-seq:
* mtch.names -> [name1, name2, ...]
* call-seq:
* names -> array_of_names
*
* Returns a list of names of captures as an array of strings.
* This is the same as mtch.regexp.names.
* Returns an array of the capture names
* (see {Named Captures}[rdoc-ref:Regexp@Named+Captures]):
*
* /(?<foo>.)(?<bar>.)(?<baz>.)/.match("hoge").names
* #=> ["foo", "bar", "baz"]
* m = /(?<foo>.)(?<bar>.)(?<baz>.)/.match("hoge")
* # => #<MatchData "hog" foo:"h" bar:"o" baz:"g">
* m.names # => ["foo", "bar", "baz"]
*
* m = /foo/.match('foo') # => #<MatchData "foo">
* m.names # => [] # No named captures.
*
* Equivalent to:
*
* m = /(?<foo>.)(?<bar>.)(?<baz>.)/.match("hoge")
* m.regexp.names # => ["foo", "bar", "baz"]
*
* m = /(?<x>.)(?<y>.)?/.match("a") #=> #<MatchData "a" x:"a" y:nil>
* m.names #=> ["x", "y"]
*/
static VALUE
@ -1149,14 +1157,16 @@ match_names(VALUE match)
/*
* call-seq:
* mtch.length -> integer
* mtch.size -> integer
* size -> integer
*
* Returns the number of elements in the match array.
* Returns size of the match array:
*
* m = /(.)(.)(\d+)(\d)/.match("THX1138.")
* # => #<MatchData "HX1138" 1:"H" 2:"X" 3:"113" 4:"8">
* m.size # => 5
*
* MatchData#length is an alias for MatchData.size.
*
* m = /(.)(.)(\d+)(\d)/.match("THX1138.")
* m.length #=> 5
* m.size #=> 5
*/
static VALUE
@ -1218,19 +1228,10 @@ rb_reg_backref_number(VALUE match, VALUE backref)
/*
* call-seq:
* mtch.offset(n) -> array
* offset(n) -> [start_offset, end_offset]
* offset(name) -> [start_offset, end_offset]
*
* Returns a two-element array containing the beginning and ending offsets of
* the <em>n</em>th match.
* <em>n</em> can be a string or symbol to reference a named capture.
*
* m = /(.)(.)(\d+)(\d)/.match("THX1138.")
* m.offset(0) #=> [1, 7]
* m.offset(4) #=> [6, 7]
*
* m = /(?<foo>.)(.)(?<bar>.)/.match("hoge")
* p m.offset(:foo) #=> [0, 1]
* p m.offset(:bar) #=> [2, 3]
* :include: doc/matchdata/offset.rdoc
*
*/