How to escape a forward slash with gsub, also does interpolation work with gsub?

575 views
Skip to first unread message

S Ahmed

unread,
Sep 30, 2012, 7:16:02 PM9/30/12
to rubyonra...@googlegroups.com
I am trying this:

I want to replace all the text in between java comments:

/* start */
replace this text here
/* end */


I'm trying:

text.gsub(//* start */(.*)/* end *//im, replace_with)

But i'm getting errors relating to expecting keyword_end.

How should I be escaping /* and */   ?

Also, does string interpolation work in gsub regex?  Say I had variables like:

start_tag = "/* start */"
end_tag = "/* end */"

I want to do:

text.gsub("#{start_tag}(.*)#{end_tag}", replace_with)

bricker

unread,
Sep 30, 2012, 7:49:14 PM9/30/12
to rubyonra...@googlegroups.com
You have to escape the slashes and asterisk in the regex, as they are regular expression characters. http://rubular.com is a great place to learn and play around with regular expressions.

    text.gsub(/\/\* start \*\/(.*)\/\* end \*\//im, replace_with)

Yes, interpolation works in regular expressions:

    text.gsub(/#{start_tag}(.*)#{end_tag}/, replace_with)

S Ahmed

unread,
Sep 30, 2012, 8:14:06 PM9/30/12
to rubyonra...@googlegroups.com
thanks!

BTW, is it possible that during the replace, it leaves the start/end tag? 
Currently it is replacing it also, I want the comments to be there after the replacement.


--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/-4Zgher1s3UJ.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

Jeffrey L. Taylor

unread,
Sep 30, 2012, 11:35:42 PM9/30/12
to rubyonra...@googlegroups.com
Quoting S Ahmed <sahme...@gmail.com>:
> I am trying this:
>
> I want to replace all the text in between java comments:
>
> /* start */
> replace this text here
> /* end */
>
>
> I'm trying:
>
> text.gsub(//* start */(.*)/* end *//im, replace_with)
>
> But i'm getting errors relating to expecting keyword_end.
>
> How should I be escaping /* and */ ?

Yes,
text.gsub(/\/\* start \*\/(.*)\/\* end \*\//im, replace_with)

Slightly simpler
text.gsub(%r{/\* start \*/(.*)/\* end \*/}im, replace_with)

>
> Also, does string interpolation work in gsub regex? Say I had variables
> like:
>
> start_tag = "/* start */"
> end_tag = "/* end */"
>
> I want to do:
>
> text.gsub("#{start_tag}(.*)#{end_tag}", replace_with)
>

gsub takes regex, not strings

text.gsub(/#{start_tag}(.*)#{end_tag}/, replace_with)

Special characters do need to be escaped in start_tag and end_tag, but in this
case only the asterisks, not the slashes.

HTH,
Jeffrey
Reply all
Reply to author
Forward
0 new messages