別のスレッドで、次の Ruby 式に遭遇しました。
str[%r{.*//(.*)}, 1]
これはどのような構文ですか?数字の1は何を意味しますか?
基本的に、これは正規表現に基づいて文字列にインデックスを付け、最初に一致したグループを返します。例えば:
str = 'http://example.com'
str[%r{.*//(.*)}, 1]
# => "example.com"
String#sliceには次のように記載されています。
Regexp が指定されている場合、str の一致部分が返されます。正規表現の後に数値または名前パラメーターが続く場合は、MatchData のそのコンポーネントが代わりに返されます。String が指定されている場合、その文字列が str にある場合はその文字列が返されます。どちらの場合も、一致しない場合は nil が返されます。
CodeGnomeの回答で正規表現スライスの説明を見ることができます。MatchData については次のとおりです。str[%r{.*//(.*)}, 1]
は と同等str.match(%r{.*//(.*)})[1]
であり、どちらも同じように機能します。バージョンは[]
より明確で短いです。
MatchData は配列および/またはハッシュとして機能し、通常のインデックス手法を使用してアクセスできます。
m = /(.)(.)(\d+)(\d)/.match("THX1138.") # m is a MatchData
# and m is #<MatchData "HX1138" 1:"H" 2:"X" 3:"113" 4:"8"> in irb
m[0] # "HX1138"
m[1] # "H"
m[1..2] #["H", "X"]