簡體   English   中英

如何在 HTTP 響應正文中使用正則表達式搜索短語

[英]How to use a regex search phrase in HTTP response body

我正在嘗試在 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>文本,只需使用 Nokogiri 的HTML::Document#title方法:

require 'nokogiri'

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

沒有要編寫或維護的正則表達式,只要 HTML 合理有效,這就會起作用。

由於您正在嘗試獲取看起來像日期模板的內容,因此您可能想要重寫該字符串,Nokogiri 也可以使用title =輕松實現:

require 'date'
require 'nokogiri'

doc = Nokogiri::HTML('<HTML> <HEAD> <TITLE>TestExample [Date]</TITLE></HEAD> </HTML>')
title = doc.title
title['[Date]'] = Date.today.to_s
doc.title = title
puts doc.to_html

# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html> <head>
# >> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>TestExample 2020-03-18</title>
# >> </head> </html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM