Ruby 使用正则表达式在http响应中查找关键字

Ruby 使用正则表达式在http响应中查找关键字,ruby,regex,html-parsing,Ruby,Regex,Html Parsing,早些时候我问了一个类似的问题,建议使用Nokogiri作为解决方案。我用过Nokogiri,效果肯定不错 但由于某些原因,我必须使用正则表达式从HTTP响应体中提取关键字 关键字的格式如下: <HTML> <HEAD> <TITLE>TestExample [Date]</TITLE></HEAD> </HTML> 然后制作一个正则表达式进行搜索: >> regex => /<title>Te

早些时候我问了一个类似的问题,建议使用Nokogiri作为解决方案。我用过Nokogiri,效果肯定不错

但由于某些原因,我必须使用正则表达式从HTTP响应体中提取关键字

关键字的格式如下:

<HTML>
<HEAD> <TITLE>TestExample [Date]</TITLE></HEAD>
</HTML>
然后制作一个正则表达式进行搜索:

>> regex
=> /<title>TestExample (.*?)<\/title>/mi

正如其他人所说,Regex不是一个好办法。如果你真的一定要使用正则表达式(不仅仅是懒得重构?),这应该可以做到:

response.match(/<title>(.*)<\/title>/mi).captures.first
response.match(/(.*)/mi).captures.first

正如其他人所说,Regex不是一个好办法。如果你真的一定要使用正则表达式(不仅仅是懒得重构?),这应该可以做到:

response.match(/<title>(.*)<\/title>/mi).captures.first
response.match(/(.*)/mi).captures.first

正确的处理方法是使用解析器。Nokogiri将处理您提出的所有要求,不会因为案例差异或日期差异而违反

require 'nokogiri'

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

doc = Nokogiri::HTML(<<EOT)
<HTML>
<HEAD> <TITLE>TestExample [1/1/2000]</TITLE></HEAD>
</HTML>
EOT
doc.at('title').text
=> "TestExample [1/1/2000]"

doc = Nokogiri::HTML(<<EOT)
<HTML>
<HEAD> <TiTlE>TestExample [Jan. 1, 2000]</tItLe></HEAD>
</HTML>
EOT
doc.at('title').text
=> "TestExample [Jan. 1, 2000]"

doc.title
=> "TestExample [Jan. 1, 2000]"
需要“nokogiri”

doc=Nokogiri::HTML(正确的处理方法是使用解析器。Nokogiri将处理您陈述的每个需求,不会因为大小写差异或日期差异而中断

require 'nokogiri'

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

doc = Nokogiri::HTML(<<EOT)
<HTML>
<HEAD> <TITLE>TestExample [1/1/2000]</TITLE></HEAD>
</HTML>
EOT
doc.at('title').text
=> "TestExample [1/1/2000]"

doc = Nokogiri::HTML(<<EOT)
<HTML>
<HEAD> <TiTlE>TestExample [Jan. 1, 2000]</tItLe></HEAD>
</HTML>
EOT
doc.at('title').text
=> "TestExample [Jan. 1, 2000]"

doc.title
=> "TestExample [Jan. 1, 2000]"
需要“nokogiri”

doc=Nokogiri::HTML(您也可以尝试使用此模式:

/(?<=<title>)[^<]++/i

/(?您也可以尝试使用此模式:

/(?<=<title>)[^<]++/i


/(?我猜这是一个输入错误,更新)/titleTestExample(.*)/mi“我迷路了。你为什么不能用nokogiri获取
的内容,然后用正则表达式搜索内容呢?@tlewin是的,那是一个输入错误。谢谢你的注意。我盯着屏幕看了太久了。:)那些“某些人”不应该告诉你如何编写代码,因为他们的方法是错误的。
安全相关的
!?只需向他们显示此页面:我猜这是一个打字错误,更新“/titleTestExample(.*)/mi”我迷路了。你为什么不能用nokogiri获取
的内容,然后用regex搜索内容?@tlewin是的,那是个打字错误。谢谢你的注意。我盯着屏幕看了太久了。:)那些“某些人”不应该告诉你如何编写代码,因为他们的方法是错误的。
安全相关的。
!?只需向他们展示这一页:谢谢你的回答。它确实有效。:…我是noobie,但不是太懒。。。正如我前面提到的,我已经在其他任务中使用了Nokogiri,但是对于这个任务,我必须只使用正则表达式。你能先说说捕获的情况吗?好吧,我无意冒犯,我只是想弄清楚;-)我只是curoius:为什么不能使用Nokogiri?
捕获
提供捕获组,即括在括号中的正则表达式部分(…)
作为数组
first
将为您提供数组的第一个元素。我看到HTML中有重复的和多个
标记,这将导致此行为不好,尤其是在正文后重复
块时。@theTinMan我听到了您的声音。让我试着分享一些关于这个正则表达式用法的更多信息。有一个web应用正在设备上运行。它有一个欢迎页面,用户在登录后首先登陆。这个url的内容非常少&有一些标准的关键字。正则表达式用于提取并匹配这些关键字。它不是一个经常更新的应用程序,目标页面有一个预设的内容&大多数(动态)功能位于不同的页面上。你还发现使用正则表达式有什么问题吗?谢谢你的回答。它确实有效。。。我是noobie,但不太懒。。。正如我前面提到的,我已经在其他任务中使用了Nokogiri,但是对于这个任务,我必须只使用正则表达式。你能先说说捕获的情况吗?好吧,我无意冒犯,我只是想弄清楚;-)我只是curoius:为什么不能使用Nokogiri?
捕获
提供捕获组,即括在括号中的正则表达式部分(…)
作为数组
first
将为您提供数组的第一个元素。我看到HTML中有重复的和多个
标记,这将导致此行为不好,尤其是在正文后重复
块时。@theTinMan我听到了您的声音。让我试着分享一些关于这个正则表达式用法的更多信息。有一个web应用正在设备上运行。它有一个欢迎页面,用户在登录后首先登陆。这个url的内容非常少&有一些标准的关键字。正则表达式用于提取并匹配这些关键字。它不是一个经常更新的应用程序,目标页面有一个预设的内容&大多数(动态)功能位于不同的页面上。您是否仍然看到使用正则表达式有任何问题?什么是
[^>>response.match(/(?@Sunshine:Lookbehind仅适用于ruby 1。9@theTinMan:Regexp引擎支持所有格量词。啊,你说得对。我在文档中搜索了
++
,但是,当然,它们没有示例,描述它的文本只显示一个
++
一个量词后跟+所有格匹配:一旦它有了matched it没有回溯。他们的行为就像贪婪的量词,但匹配后,他们拒绝“放弃”匹配,即使这会危及整体匹配。
什么是
[^>>response.match(/(?@Sunshine:Lookbehind仅适用于ruby 1。9@theTinMan:Regexp引擎支持所有格量词。啊,你说得对。我在文档中搜索了
++
,但是,当然,它们没有示例,描述它的文本只显示一个
++
一个量词后跟+所有格匹配:一旦它有了m他们的行为就像贪婪的量词,但匹配后他们拒绝“放弃”他们的匹配,即使这会危及整体匹配。
只是好奇,如果关键字在http响应中的任何位置,我能找到它吗?关键字?你是说标记?如果它在解析的HTML正文中,是的。更重要的是,如果
,它不会被愚弄
在文本中的某个地方,不像regex那样很难识别。只是好奇,如果关键字在http响应中的任何地方,我能找到它吗?keywo