我试图删除给定字符串中的所有<br>
。
def extract(a)
a=a.delete("/ (\<br\>)+ /")
puts a
end
extract("e<gr>y<br>t<gh>hello")
将egytghhello
作为输出。为什么<r>
的{{1}}和<gr>
<>
未被打印?
答案 0 :(得分:7)
String.delete
不会将正则表达式作为参数,它会使用一组字母,所有这些字母都将从调用它的字符串中删除。
因此,您的代码说:删除任何<
,>
,b
,r
,(
,)
,{ {1}},空格和+
。
如果您想使用正则表达式删除字符串的一部分(或/
以便进行原位替换),则可以使用String.gsub
。
关于使用正则表达式处理HTML的不可靠性的常见警告适用:考虑使用像Nokogiri这样的东西,特别是如果你有任何解析或操作要求超出此范围。
答案 1 :(得分: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
更好。
答案 2 :(得分:0)
尝试以下方法:
a = a.gsub(/<br>/, '')