Brian Candler wrote in post #991490:
> Alexey Petrushin wrote in post #991484:
>> Probably a stupid question, but is there a way to use :gsub replacement
>> without $0 $1 $2 $3 (and without "\0\1\2\3")?
>
> There is also $~ (Regexp.last_match); $1/$2/etc are just a facade.
>
>> I would prefer something like:
>>
>>     "John Smith".gsub /(.+)\s(.+)/ do |name, family|
>>       p [name, family]
>>
>>       # instead of this
>>       p [$1, $2]
>>     end
>
> "John Smith".gsub /(.+)\s(.+)/ do
>   name, family = $~.captures
>   p [name, family]
> end
>

And if you want to avoid writing code in perl:

str = "John Smith"
pattern = /(.+)\s(.+)/

result = str.gsub(pattern) do
  md_obj = Regexp.last_match
  first_name, last_name = md_obj[1], md_obj[2]

  p first_name, last_name
end

Or to avoid any indexing, you could do this:

str = "John Smith"
pattern = /(.+)\s(.+)/

result = str.gsub(pattern) do |match|
  first_name, last_name = match.split
  p first_name, last_name

  "some replacement"
end

puts result

--output:--
"John"
"Smith"
some replacement

-- 
Posted via http://www.ruby-forum.com/.