我正在尝试在HTTP响应正文中搜索这样的短语:
>> myvar1
<HTML>
<HEAD> <TITLE>TestExample [Date]</TITLE></HEAD>
</HTML>
[执行此操作时,我没有得到任何结果:
>> myvar.scan(/<HEAD> <TITLE>TestExample [Date]<\/TITLE><\/HEAD>/)
[]
这里,[Date]
是一个动态变量,它通过循环迭代获取其值。
我应该在正则表达式中添加/更改什么?
我正在使用Nokogiri扫描HTTP响应正文中的关键字。
[请勿使用正则表达式解析任何标记,例如HTML。为此,将其输入适当的SAX或DOM解析器中并以这种方式提取所需内容更加容易维护。这样做的原因是,无论您如何巧妙地编写正则表达式,总会有一些可能遗忘的极端情况。
require 'nokogiri'
response = "<HTML> <HEAD> <TITLE>TestExample [Date]</TITLE></HEAD> </HTML>"
doc = Nokogiri::HTML( response )
doc.css( "title" ).text
这将起作用
<HEAD> <TITLE>TestExample (.*?)<\/TITLE><\/HEAD>
http://rubular.com/r/latepMqrjx
您可能不需要像<HEAD> <TITLE>
那样具体的内容,因为我怀疑会出现多个标题。区分大小写和换行符也可能是一个问题。我可能会使用
/<title>TestExample (.*?)<\//im
您使它变得太难了。使用Nokogiri,您可以轻松地解析和搜索HTML和/或XML。
要获取<title>
文本,只需使用:
require 'nokogiri'
doc = Nokogiri::HTML('<HTML> <HEAD> <TITLE>TestExample [Date]</TITLE></HEAD> </HTML>')
doc.title # => "TestExample [Date]"
没有正则表达式要编写或维护,只要HTML是合理有效的,它就可以工作。