如何在HTTP响应正文中使用正则表达式搜索短语

问题描述 投票:0回答:3

我正在尝试在HTTP响应正文中搜索这样的短语:

>> myvar1
<HTML>
<HEAD> <TITLE>TestExample [Date]</TITLE></HEAD>
</HTML>

[执行此操作时,我没有得到任何结果:

>> myvar.scan(/<HEAD> <TITLE>TestExample [Date]<\/TITLE><\/HEAD>/)
[]

这里,[Date]是一个动态变量,它通过循环迭代获取其值。

我应该在正则表达式中添加/更改什么?


我正在使用Nokogiri扫描HTTP响应正文中的关键字。

ruby regex html-parsing
3个回答
5
投票

[请勿使用正则表达式解析任何标记,例如HTML。为此,将其输入适当的SAX或DOM解析器中并以这种方式提取所需内容更加容易维护。这样做的原因是,无论您如何巧妙地编写正则表达式,总会有一些可能遗忘的极端情况。

require 'nokogiri'

response = "<HTML> <HEAD> <TITLE>TestExample [Date]</TITLE></HEAD> </HTML>"
doc = Nokogiri::HTML( response )


doc.css( "title" ).text

0
投票

这将起作用

<HEAD> <TITLE>TestExample (.*?)<\/TITLE><\/HEAD>

http://rubular.com/r/latepMqrjx

您可能不需要像<HEAD> <TITLE>那样具体的内容,因为我怀疑会出现多个标题。区分大小写和换行符也可能是一个问题。我可能会使用

/<title>TestExample (.*?)<\//im

0
投票

您使它变得太难了。使用Nokogiri,您可以轻松地解析和搜索HTML和/或XML。

要获取<title>文本,只需使用:

require 'nokogiri'

doc = Nokogiri::HTML('<HTML> <HEAD> <TITLE>TestExample [Date]</TITLE></HEAD> </HTML>')
doc.title # => "TestExample [Date]"

没有正则表达式要编写或维护,只要HTML是合理有效的,它就可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.