我需要从红宝石正则表达式的帮助,以取代串
...<div>\r\n<span field=\"field_to_replace\">\r\n<div>....
更换field_to_replace
有字符串中的field_to_replace
多次出现。我只需要在它之前和之后使用标签替换这种情况。
我需要从红宝石正则表达式的帮助,以取代串
...<div>\r\n<span field=\"field_to_replace\">\r\n<div>....
更换field_to_replace
有字符串中的field_to_replace
多次出现。我只需要在它之前和之后使用标签替换这种情况。
除非确保源布局不会更改,否则请勿使用正则表达式尝试在HTML或XML内搜索或替换。使用解析器进行更改非常简单,他们可以轻松处理对源的更改。
这将替换HTML字符串的所有出现:
require 'nokogiri'
doc = Nokogiri::HTML::DocumentFragment.parse("<div><span field='field_to_replace'><div>")
doc.to_html # => "<div><span field=\"field_to_replace\"><div></div></span></div>"
doc.search('div span[@field]').each do |span|
span['field'] = 'foo'
end
doc.to_html # => "<div><span field=\"foo\"><div></div></span></div>"
如果您要更换只是第一次出现,使用at
代替search
:
通过定义CSS选择器可以快速方便地识别节点。而且,如果您需要更强大的功能,那么可以使用XPath代替CSS。
最简单的方法是:
str = "...<div>\r\n<span field=\"field_to_replace\">\r\n<span field=\"field_to_replace\">\r\n<div>...."
str.split("field_to_replace").join("new_field")
让我们知道,如果你需要更复杂的东西。
这可以用一个'gsub'完成。 – sawa
同意,str.gsub('field_to_replace','new_field')。正在尝试使用更可能知道的方法,但您的解决方案更好。 –
哦,我的,这个问题再次。好的,不要使用正则表达式,因为它会非常脆弱并且可能会破坏,特别是如果您不拥有HTML生成器。唯一需要考虑的是_EXTREMELY_简单的HTML/XML。相反,[使用解析器](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)。 Ruby最常用的是[Nokogiri](http://nokogiri.org)。互联网上有很多例子,Stack Overflow解释了如何做到这一点。 –
好的,谢谢@theTinMan – Rubyman