[如果您只想检查是否有一个未关闭的尖括号,则不需要精美的宝石。您可以只使用StringScanner
。
给出HTML字符串:
myhtml = "<title> my title </title>"
如果存在浮点/未转义的true
或<
以及令人反感的字符本身,如何编写返回>
的函数?例子:
myhtml = "<title> my title </title>"
hasFloating(myhtml) => false
myhtml = "<title> < </title>"
hasFloating(myhtml) => true, <
myhtml = "<title> > </title>"
hasFloating(myhtml) => true, >
请记住,此字符串可能是其中包含多个元素的巨大HTML代码。我也可以使用一个函数来检查是否存在未转义的字符,第二个函数返回违规字符本身]
编辑:为了记录,我也在该项目中使用mechanize
宝石
给出一个HTML字符串:myhtml =“
[如果您只想检查是否有一个未关闭的尖括号,则不需要精美的宝石。您可以只使用StringScanner
。
require 'strscan'
def has_floating(html)
open_angle = 0
scanner = StringScanner.new(html)
while scanner.scan(/<|>/)
case scanner.matched
when '<'
return [true, '<'] if open_angle == 1
open_angle += 1
when '>'
return [true, '>'] if open_angle == 0
open_angle -= 1
end
scanner.scan_until(/[^<>]+/)
end
return false
end
myhtml = "<title> my title </title>"
puts has_floating(myhtml).inspect
#=> false
myhtml = "<title> < </title>"
puts has_floating(myhtml).inspect
#=> [true, "<"]
myhtml = "<title> > </title>"
puts has_floating(myhtml).inspect
#=> [true, ">"]
[如果您只想检查是否有一个未关闭的尖括号,则不需要精美的宝石。您可以只使用StringScanner
。