1

別のスレッドで、次の Ruby 式に遭遇しました。

str[%r{.*//(.*)}, 1]

これはどのような構文ですか?数字の1は何を意味しますか?

4

2 に答える 2

7

これは、MatchData を使用した正規表現スライスです

基本的に、これは正規表現に基づいて文字列にインデックスを付け、最初に一致したグループを返します。例えば:

str = 'http://example.com'
str[%r{.*//(.*)}, 1]
# => "example.com"

String#sliceには次のように記載されています。

Regexp が指定されている場合、str の一致部分が返されます。正規表現の後に数値または名前パラメーターが続く場合は、MatchData のそのコンポーネントが代わりに返されます。String が指定されている場合、その文字列が str にある場合はその文字列が返されます。どちらの場合も、一致しない場合は nil が返されます。

于 2012-11-13T05:17:06.233 に答える
1

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"]
于 2012-11-13T05:27:55.410 に答える