@@ -68,6 +68,60 @@ p /\$(?<dollars>\d+)\.(?<cents>\d+)/.match("$3.67")[:cents] # => "67"
6868p /(?<alpha>[a-zA-Z] +) |(?<num>\d +) / .match(" aZq" )[:num ] # => nil
6969```
7070
71+ #@since 3.1
72+ ### def match(n) -> String | nil
73+ ### def match(name) -> String | nil
74+
75+ n 番目、または name という名前のグループにマッチした部分文字列を返します。
76+
77+ [ m: MatchData #\[\] ] と似ていますが、範囲や複数要素の指定はできず、
78+ 単一のグループに対応する部分文字列だけを返します。
79+ マッチしていないグループを指定した場合は nil を返します。
80+
81+ - ** param** ` n ` -- 返す部分文字列のインデックスを 0 以上の整数で指定します。
82+ 0 はマッチ全体を意味します。
83+ - ** param** ` name ` -- 名前付きグループの名前を [ c: String ] か [ c: Symbol ] で指定します。
84+ - ** raise** ` IndexError ` -- 範囲外の n や、存在しない name を指定した場合に発生します。
85+
86+ ``` ruby title="例"
87+ m = /(.)(.)(\d +)(\d )(\w ) ?/ .match(" THX1138." )
88+ p m.match(0 ) # => "HX1138"
89+ p m.match(4 ) # => "8"
90+ p m.match(5 ) # => nil
91+
92+ m = /(?<foo>.)(.)(?<bar>.+) / .match(" hoge" )
93+ p m.match(:foo ) # => "h"
94+ p m.match(:bar ) # => "ge"
95+ ```
96+
97+ - ** SEE** [ m: MatchData #\[\] ] , [ m: MatchData #match_length]
98+
99+ ### def match_length(n) -> Integer | nil
100+ ### def match_length(name) -> Integer | nil
101+
102+ n 番目、または name という名前のグループにマッチした部分文字列の長さを
103+ 文字数で返します。
104+
105+ マッチしていないグループを指定した場合は nil を返します。
106+
107+ - ** param** ` n ` -- 対象の部分文字列のインデックスを 0 以上の整数で指定します。
108+ 0 はマッチ全体を意味します。
109+ - ** param** ` name ` -- 名前付きグループの名前を [ c: String ] か [ c: Symbol ] で指定します。
110+ - ** raise** ` IndexError ` -- 範囲外の n や、存在しない name を指定した場合に発生します。
111+
112+ ``` ruby title="例"
113+ m = /(.)(.)(\d +)(\d )(\w ) ?/ .match(" THX1138." )
114+ p m.match_length(0 ) # => 6
115+ p m.match_length(4 ) # => 1
116+ p m.match_length(5 ) # => nil
117+
118+ # 長さは文字数で数える
119+ p /(\p {Hiragana}+) / .match(" あいう" ).match_length(1 ) # => 3
120+ ```
121+
122+ - ** SEE** [ m: MatchData #match]
123+ #@end
124+
71125### def begin(n) -> Integer | nil
72126
73127n 番目の部分文字列先頭のオフセットを返します。
0 commit comments