scratch/content/html/fr/blog/2009-09-replace-all-except-some-part.md
2010-03-30 16:39:12 +02:00

1.8 KiB

isHidden menupriority kind created_at title multiTitle multiDescription tags
false 1 article 2009-09-22T22:13:25+02:00 replace all except some part
fr en
replace all except some part replace all except some part
fr en
pas de description. no description.
ruby
regexp
regular expression

My problem is simple:

I want to filter a text except some part of it. I can match easily the part I don't want to be filtered. For example

... text ... BEGIN not to filter ... text ... END not to filter ... text ...

I searched a better way to do that, but the best I can do is using split and scan.

def allExceptCode( f, content ) regexp=/]*>.*?<\/code>/m tmp="" mem=[] content.scan(regexp).each do |c| mem <<= c end i=0 content.split(regexp).each do |x| tmp <<= send(f,x) if not mem[i].nil? tmp <<= mem[i] i+=1 end end tmp end

An usage is:

def filter(content) content.gsub(/e/,'X') end ... allExceptCode(:filter, content) ...

A better syntax would be:

# !!!!!!!!!! THIS SYNTAX DOES NOT WORK !!!!!!! # def allExceptCode( f, content ) regexp=/]*>.*?<\/code>/m tmp="" content.split(regexp).each do |x| separator=$& tmp <<= send(f,x) if not separator.nil? tmp <<= separator end end tmp end

I would expect the split make a search on a regular expression and then give the matched expression into the $& variable. But it is not the case.

If someone know a nicer way to do that I will be happy to know how.