regex gsub

  • Thread starter Lorenzo Brito Morales
  • Start date
L

Lorenzo Brito Morales

i have already working these phone.gsub(regex, "<
#{regex.match(phone)} >" ) but i think is another way to do it not?
like phone.gsub(regex,"< \1 >")
but the last instrucction does not bring the regex.match

what i want to do , is suppose you have the string "i love my dad "
the regex find dad then substitute dad <dad> , i have already solved
but i want
to know if the a fancy way to do the gsub like gsub(regex,"< \1 >")
instead of phone.gsub(regex, "< #{regex.match(phone)} >" )
 
J

Junegunn Choi

[Note: parts of this message were removed to make it a legal post.]

Try

"i love my dad".gsub(/dad/) { |match| "<#{match}>" }

or,

"i love my dad".gsub(/dad/) { "<#{$&}>" }
 
H

Harry Kakueki

=A0i have already working these phone.gsub(regex, "<
#{regex.match(phone)} >" ) but i think is another way to do it not?
like phone.gsub(regex,"< \1 >")
but the last instrucction does not bring the regex.match

what i want to do , is suppose you have the string "i love my dad "
the regex find dad then substitute dad <dad> , i have already solved
but i want
to know if the a fancy way to do the gsub like gsub(regex,"< \1 >")
instead of phone.gsub(regex, "< #{regex.match(phone)} >" )

str =3D "i love my dad"
str2 =3D "I went to Baghdad"

p str.gsub(/(dad)/,'<\1>') #> "i love my <dad>"

p str2.gsub(/(dad)/,'<\1>') #> "I went to Bagh<dad>"


Do you also want that second match?





Harry
 
B

Brian Candler

Lorenzo Brito Morales wrote in post #984075:
i have already working these phone.gsub(regex, "<
#{regex.match(phone)} >" ) but i think is another way to do it not?
like phone.gsub(regex,"< \1 >")
but the last instrucction does not bring the regex.match

It's to do with how double-quoted strings interpret backslashes.

irb(main):001:0> "< \1 >"
=> "< \001 >"
irb(main):002:0> '< \1 >'
=> "< \\1 >"
irb(main):003:0> "< \\1 >"
=> "< \\1 >"
irb(main):004:0> "< \\1 >".size
=> 6
irb(main):005:0> puts "< \\1 >"
< \1 >
=> nil

Note that "< \\1 >" contains a *single* backslash - a backslash escaped
with a backslash :)

But you'd probably be better using the block form of gsub anyway:

phone.gsub(regex) { "< #{$&} >" }
 

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

Forum statistics

Threads
473,774
Messages
2,569,598
Members
45,152
Latest member
LorettaGur
Top