Replace a string delimited by 2 other string, regexp problem

Hello,

I want to replace a string in a file who is delimited by 2 other string.
My problem is to find the start and the end string delimiter and replace the content between both.

Ex:
str = " /* startdel1 */ text1 text1 text1 /*enddel1*/ /*startdel2*/ text2 text2 text2 /*enddel2*/ /*startdel3*/ text3 text3 text3 /*enddel3*/ "

In this example i'want to replace the string /*startdel2*/ text2 text2 text2 /*enddel2*/
                                                                by
                                                                /*startdel2*/ hello /*enddel2*/

i'm newbie and it's a real problem for me to do that.
help me
thx

···

___________________________________________________________________________ Yahoo! Mail réinvente le mail ! Découvrez le nouveau Yahoo! Mail et son interface révolutionnaire.
http://fr.mail.yahoo.com

Learn about regular expressions, and then look into the gsub method of
String. You can get a very brief intro to regular expressions here:
http://ruby-doc.org/docs/ProgrammingRuby/html/language.html#UJ

···

On Tue, Oct 03, 2006 at 04:55:44AM +0900, S?bastien Maurette wrote:

Hello,

I want to replace a string in a file who is delimited by 2 other string.
My problem is to find the start and the end string delimiter and replace
the content between both.

Hello !

Ex:
str = " /* startdel1 */ text1 text1 text1 /*enddel1*/ /*startdel2*/
text2 text2 text2 /*enddel2*/ /*startdel3*/ text3 text3 text3
/*enddel3*/ "

In this example i'want to replace the string /*startdel2*/ text2 text2
text2 /*enddel2*/
                                                               by
                                                              
/*startdel2*/ hello /*enddel2*/

left = "/*startdel2*/"
right = "/*enddel2*/"
p str.gsub(/#{Regexp.quote(left)}(.*?)#{Regexp.quote(right)}/m,
           "#{left}hello#{right}")

  You need the /m as there might be newlines in the match, and you need
the Regexp.quote as your strings contain characters which lose their
usual meaning in a regexp (*).

  Cheers !

  Vince

Vincent Fourmond wrote:

left = "/*startdel2*/"
right = "/*enddel2*/"
p str.gsub(/#{Regexp.quote(left)}(.*?)#{Regexp.quote(right)}/m,
           "#{left}hello#{right}")

The "right" could be in a positive lookahead making things probably a
likkle bit faster. No lookbehinds until Ruby 1.9 / 2.0 though.

p str.gsub(/#{Regexp.quote(left)}(.*?)(?=#{Regexp.quote(right)})/m,
           "#{left}hello")

David Vallner