match(f.read)[0].to_a[0] meaning?

Z

Zhenning Guan

my_ip = (require 'open-uri' ; open("http://myip.dk") { |f|
/([0-9]{1,3}\.){3}[0-9]{1,3}/.match(f.read)[0].to_a[0] })

what is the different between match(f.read)[0].to_a[0] and match(f.read)
?

is someone can explain it?
 
S

Sebastian Hungerecker

Zhenning said:
what is the different between match(f.read)[0].to_a[0] and match(f.read)

match(f.read) returns a MatchData object.
match(f.read)[0] returns a String object, which is the substring that
the regular expression matched.(*)
match(f.read)[0].to_a returns an Array object where each item of the array
is a line of the string.
match(f.read)[0].to_a[0] returns the first item of that array, i.e. the first
line of the string.

Since however, in this case, the matched string can't contain more than one
line the whole to_a[0] business is superfluous.

(*) match_data_object, with 0 < i <= n, where n is the number of capturing
groups in the regular expression, returns the substring matched by the ith
capturing group of the regular expression.

HTH,
Sebastian
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top