2

私はMatchData#captures初めてRubyでこのメソッドに出くわし、誰かが私のためにもう少し説明してくれるかどうか尋ねたいと思いました。Rubyのドキュメントによると:

キャプチャの配列を返します。と同等mtch.to_a[1..-1]です。

しかし、現在、長い文字列で正規表現を実行していて、最後に評価された項目が返されるようです。これは意味がありますか?

これは文字列です:

431cdb7b1ad8183a1434b6d1a407731fac0ea61b8d720d733fefaa77f063df8e vidcoder [23/May/2012:01:17:16 +0000] 76.78.212.49 - B24DEA4883A9FF95 REST.GET.OBJECT accounts/6/videos/xboxcCFC/video.mp4 "GET /accounts/6/videos/xboxcCFC/video.mp4 HTTP/1.1" 206 - 2 697898511 56 56 "-" "Apple Mac OS X v10.6.8 CoreMedia v1.0.0.10K549" -

これは正規表現です:

line.match(%r{^.*\s+HTTP.*\s+-\s+(\d+)\s+}).captures

この場合、数値2が返されます

4

1 に答える 1

5

正規表現でキャプチャ グループを 1 つだけ指定したため、それを返すだけです (「2」文字列を含む 1 要素の配列として、「2」文字列を直接返すこととは異なります)。

line.match(%r{^.*\s+HTTP.*\s+-\s+(\d+)\s+}).captures
=> ["2"]

より多くの要素をキャプチャしようとすると、ドキュメントに示されているように、配列にはより多くの要素が含まれます。

line.match(%r{^.*\s+HTTP(.*)\s+-\s+(\d+)\s+}).captures
=> ["/1.1\" 206", "2"] 
于 2012-12-01T15:52:56.670 に答える