scratch/content/html/en/blog/2009-09-replace-all-except-some-part.md
Yann Esposito (Yogsototh) 88c9f832df Clean content pages
2010-04-29 15:43:21 +02:00

1.6 KiB

isHidden menupriority kind created_at title tags
false 1 article 2009-09-22T22:13:25+02:00 replace all except some part
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.