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

Ruby 如何在HTTP响应正文中使用正则表达式搜索短语,ruby,regex,html-parsing,Ruby,Regex,Html Parsing,我试图在HTTP响应正文中搜索这样的短语: >> myvar1 <HTML> <HEAD> <TITLE>TestExample [Date]</TITLE></HEAD> </HTML> >myvar1 测试示例[日期] 当我这样做时,我不会得到任何结果: >> myvar.scan(/<HEAD> <TITLE>TestExample [Date]<\/TITLE

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

>> myvar1
<HTML>
<HEAD> <TITLE>TestExample [Date]</TITLE></HEAD>
</HTML>
>myvar1
测试示例[日期]
当我这样做时,我不会得到任何结果:

>> myvar.scan(/<HEAD> <TITLE>TestExample [Date]<\/TITLE><\/HEAD>/)
[]
>myvar.scan(/TestExample[Date]/)
[]
这里,
[Date]
是一个动态变量,通过循环迭代获取其值

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


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

这会有用的

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

你可能不需要像
那样具体的东西,因为我怀疑会有不止一个标题。区分大小写和换行也可能是一个问题。我可能会用

/<title>TestExample (.*?)<\//im
/TestExample(.*)这将起作用

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

你可能不需要像
那样具体的东西,因为我怀疑会有不止一个标题。区分大小写和换行也可能是一个问题。我可能会用

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

/TestExample(.*)请不要用正则表达式解析任何类似HTML的标记。出于这种目的,将其输入到适当的SAX或DOM解析器中,并以这种方式提取所需内容,会更易于维护。这样做的原因是,无论你如何巧妙地制定你的正则表达式,总会有一些你可能忘记的极端情况

require 'nokogiri'

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


doc.css( "title" ).text
需要“nokogiri”
response=“TestExample[日期]”
doc=Nokogiri::HTML(响应)
css文件(“标题”).文本

请不要用正则表达式解析任何像HTML这样的标记。出于这种目的,将其输入到适当的SAX或DOM解析器中,并以这种方式提取所需内容,会更易于维护。这样做的原因是,无论你如何巧妙地制定你的正则表达式,总会有一些你可能忘记的极端情况

require 'nokogiri'

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


doc.css( "title" ).text
需要“nokogiri”
response=“TestExample[日期]”
doc=Nokogiri::HTML(响应)
css文件(“标题”).文本

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

要获取
文本,只需使用Nokogiri的方法:


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

要获取
文本,只需使用Nokogiri的方法:


实际输入是什么?谢谢,对不起。我太快了。以上两项均返回[[“[日期]”]。然而,我试图在响应体中找到-TestExample[Date]。它是“如果”检查的一部分-如果(不是res或不是res.scan(TestExample[Date])->则失败操作,否则通过操作。除了正则表达式之外,这里需要注意的一点是,这个“日期”实际上是一个参数,它从循环的开头开始&为每个过程赋值。只是不要使用正则表达式。虽然它适用于简单的任务,但对于中等复杂度的任务来说,它太脆弱了,如果页面发生变化,它很可能会崩溃。DOM解析器更健壮,更易于维护。实际输入是什么?谢谢,对不起。我太快了。以上两项均返回[[“[日期]”]。然而,我试图在响应体中找到-TestExample[Date]。它是“如果”检查的一部分-如果(不是res或不是res.scan(TestExample[Date])->则失败操作,否则通过操作。除了正则表达式之外,这里需要注意的一点是,这个“日期”实际上是一个参数,它从循环的开头开始&为每个过程赋值。只是不要使用正则表达式。虽然它适用于简单的任务,但对于中等复杂度的任务来说,它太脆弱了,如果页面发生变化,它很可能会崩溃。DOM解析器更健壮,更易于维护。使用
css('title')
时要小心
css
返回一个节点集,其作用类似于数组。相反,因为您正在搜索
title
,请使用
at
或其别名之一返回匹配的第一个节点。谢谢@Bjoern。我尝试使用Nokogiri,现在收到错误消息。请参阅我对问题的更新。您可以使用irb验证答案中的代码是否有效。错误在代码的其他地方。请打开一个新问题。Nokogiri解析HTML/XML,但不幸的是,它不能归结为javascript级别。为此,您需要选择每个脚本节点并使用正则表达式来查找您要查找的内容。下面是一个SO,它讨论了类似的内容。非常感谢@BjoernRennhak和所有响应帮助的人。小心使用
css('title')
css
返回一个节点集,其作用类似于数组。相反,因为您正在搜索
title
,请使用
at
或其别名之一返回匹配的第一个节点。谢谢@Bjoern。我尝试使用Nokogiri,现在收到错误消息。请参阅我对问题的更新。您可以使用irb验证答案中的代码是否有效。错误在代码的其他地方。请打开一个新问题。Nokogiri解析HTML/XML,但不幸的是,它不能归结为javascript级别。为此,您需要选择每个脚本节点并使用正则表达式来查找您要查找的内容。下面是一个SO,它讨论了类似的内容。非常感谢@BjoernRennhak和所有响应帮助的人。不要使用正则表达式解析HTML。您无法用正则表达式可靠地解析HTML,在这条路上您将面临悲伤和挫折。一旦HTML改变了您的预期,您的代码就会被破坏。请参阅下面的nokogiri响应。@Andy Lester Thnx以获得提示。不要使用正则表达式解析HTML。您无法用正则表达式可靠地解析HTML,在这条路上您将面临悲伤和挫折。一旦HTML改变了您的预期,您的代码就会被破坏。请看下面的nokogiri回复。@Andy Lester Thnx,请注意。