Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 给定一个HTML字符串,查找浮动的最佳方法是什么<&燃气轮机;_Ruby_Mechanize - Fatal编程技术网

Ruby 给定一个HTML字符串,查找浮动的最佳方法是什么<&燃气轮机;

Ruby 给定一个HTML字符串,查找浮动的最佳方法是什么<&燃气轮机;,ruby,mechanize,Ruby,Mechanize,给定一个HTML字符串: myhtml = "<title> my title </title>" 请记住,这个字符串可能是一段包含多个元素的巨大HTML代码。我还可以使用一个函数检查是否存在未替换的字符,第二个函数返回违规字符本身 编辑:为了记录在案,我还在这个项目中使用mechanizegem如果你只想检查是否有一个未闭合的角括号,你不需要一个漂亮的gem。 您只需使用StringScanner 需要“strscan” def具有浮动(html) 打开角度=0 sc

给定一个HTML字符串:

myhtml = "<title> my title </title>"
请记住,这个字符串可能是一段包含多个元素的巨大HTML代码。我还可以使用一个函数检查是否存在未替换的字符,第二个函数返回违规字符本身


编辑:为了记录在案,我还在这个项目中使用
mechanize
gem

如果你只想检查是否有一个未闭合的角括号,你不需要一个漂亮的gem。
您只需使用
StringScanner

需要“strscan”
def具有浮动(html)
打开角度=0
scanner=StringScanner.new(html)
while scanner.scan(//)
病例扫描。匹配
当“]”时,如果打开角度==0
开启角-=1
结束
scanner.scanner_直到(/[^]+/)
结束
返回错误
结束
myhtml=“我的标题”
puts具有浮动(myhtml)。检查
#=>错误
myhtml=“<”
puts具有浮动(myhtml)。检查
#=>[正确,”“
puts具有浮动(myhtml)。检查
#=>[正确,“>”]

我不打算进入HTML部分,因为编写HTML解析器本身就是一个项目

只需返回一个数组,就可以返回多个值

def hasFloating(html)
  # extract a < or > character surrounded by two spaces
  char = html[/(?<= )[<>](?= )/]
  [!!char, char] # !!char converts char into a boolean
end
def hasFloating(html)
#提取由两个空格包围的<或>字符

char=html[/(?我想我用
nokogiri
gem找到了答案:

htmlStr = Nokogiri::HTML(html).text
# check for < or > in htmlSTR
htmlStr=Nokogiri::HTML(HTML).text
#检查htmlSTR中的<或>
它基本上解析HTML并删除所有标记:

html = <title> < </title>
# parse with nokogiri
=> " < "
html=<
#用nokogiri解析
=> " < "

然后可用于检查浮动。

如果要分析HTML,需要一个HTML解析器。问题是如何检查是否有一个角括号没有匹配的对。您的代码检查是否有一个角括号,它的前面和后面是
空格
字符。@Adrian这不是全部问题estion是关于“我如何编写一个返回true的函数…,以及有问题的字符本身?”它可能会起作用,但你正在使用武士刀切纸。它不必要地沉重,有时结果不是你想要的。Nokogiri首先解析整个html字符串。我的解决方案只找到第一个未关闭/打开并退出的尖括号。当html字符串很大时,它应该比Nokogiri快得多。
htmlStr = Nokogiri::HTML(html).text
# check for < or > in htmlSTR
html = <title> < </title>
# parse with nokogiri
=> " < "