不要使用正则表达式或字符串解析。那些只会让你的头受伤。使用解析器。
在Ruby中我会使用引入nokogiri:
require 'nokogiri'
html = '
...
...
'
doc = Nokogiri::HTML(html)
nav = doc.at('nav').content = "this is a new block"
puts doc.to_html
,输出:
this is a new block...
当然你想要的东西,如File.read('snippet.html')更换"this is a new block"。
如果替换文件包含HTML片段,而不是nav内容,而不是使用:
nav = doc.at('nav').replace('this is a new block')
输出将是相同的。 (同样,使用File.read抢,从一个文件,如果这就是你瘦。)
在引入nokogiri,at发现由CSS或XPath访问指定的标签的第一个实例,并返回节点。我使用上面的CSS,但//nav也可以工作。 at猜测访问者的类型。如果您想具体说明,您可以使用at_css或at_xpath,因为可能存在模糊的访问器。另外,Nokogiri有search,它返回一个NodeSet,它就像一个数组。你可以迭代你想要的结果。而且,像at一样,CSS和XPath特定版本分别为css和xpath。
Nokogiri有一个CLI接口,就像这个例子一样简单,它可以工作,但我也可以在sed或Ruby/Perl/Python单线程中完成。
curl -s http://nokogiri.org | nokogiri -e'p $_.css("h1").length'
HTML很少是这个简单不过,特别是任何被发现漫游荒野和CLI或一个班轮解决方案将快速增长失控,或者干脆死了。我说这是基于多年来撰写许多蜘蛛和RSS聚合器 - 当您引入额外的HTML或XML源时,开始的简单生长会变得更加复杂,并且从未如此简单。使用解析器教会我先去他们。