2011-09-23 23 views
2

使用正则表达式我试图给定的字符串中剥离所有<br>的。红宝石

def extract(a) 
    a=a.delete("/ (\<br\>)+ /") 
    puts a 
    end 

    extract("e<gr>y<br>t<gh>hello") 

是给egytghhello作为输出。为什么的<gr><r>gh<>没有得到印?

回答

2

这应该以防万一占<br><br /><br/>

str = "Hi and <gr>y<br>t<gh>hello<br />bla<br/> some moar" 
puts str.gsub(/<br ?\/?>/,'') 

或者使用喜欢你的方法。例如:

def extract(str) 
    str.gsub(/<br ?\/?>/,'') 
end 
puts extract("Hi and <gr>y<br>t<gh>hello<br />bla<br/> some moar") 

我个人认为最好是有方法返回一个字符串,然后做puts extract()不必在方法内部的puts

7

String.delete并不需要一个正则表达式作为参数,它采用一组字母,所有这些都将从这就是所谓的字符串被删除。

所以,你的代码是说:删除任何的<>br()+,空间和/

如果您想使用正则表达式来删除部分字符串(或gsub!以进行就地替换),您将使用String.gsub

有关使用正则表达式处理HTML的不可靠性通常的警告适用于:考虑使用类似引入nokogiri,特别是如果你有超出这个任何分析或处理要求。

+0

我试着做'a.gsub(/(\ )+ /, “”)',但其打印同样的事情。 – Ava

+1

' “电子ý
你好” .gsub(/(\ )+/“”)''返回的 “e ý
你好”',原始字符串不变(当然,因为有没有在原来的字符串模式的匹配。在强调一些问题与使用上的HTML正则表达式,你的模式将只匹配从其他文字用空格隔开突破标签,而不会处理自闭XML风格'
'标签。 –

0

尝试以下操作:

a = a.gsub(/<br>/, '')