[英]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.