Skip to content

Commit 2e3e9fc

Browse files
authored
Merge pull request #3310 from Watson1978/matchdata-match-and-match-length
MatchData: match と match_length を追加 (Ruby 3.1)
2 parents 2fef49f + bf308bb commit 2e3e9fc

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

manual/api/_builtin/MatchData.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,60 @@ p /\$(?<dollars>\d+)\.(?<cents>\d+)/.match("$3.67")[:cents] # => "67"
6868
p /(?<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

73127
n 番目の部分文字列先頭のオフセットを返します。

0 commit comments

Comments
 (0)