Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 nokogiri解析正则表达式_Ruby_Regex - Fatal编程技术网

Ruby nokogiri解析正则表达式

Ruby nokogiri解析正则表达式,ruby,regex,Ruby,Regex,我正在使用以下代码解析网页: @doc = Nokogiri::HTML(open(url)) links = @doc.css("span[class='reviewCount']").css('a') links.each do |link| link["href"] end 我得到了如下的href引用列表 /Restaurant_Review-g187147-d719052-Reviews-Epicure-City_Ile_de_France.html#REVIEWS /Resta

我正在使用以下代码解析网页:

@doc = Nokogiri::HTML(open(url))
links = @doc.css("span[class='reviewCount']").css('a')
links.each do |link| 
  link["href"]
end
我得到了如下的href引用列表

/Restaurant_Review-g187147-d719052-Reviews-Epicure-City_Ile_de_France.html#REVIEWS
/Restaurant_Review-g187147-d6958622-Reviews-Seb_on-City_Ile_de_France.html#REVIEWS
/Restaurant_Review-g187147-d8766885-Reviews-Le_cherine-City_Ile_de_France.html#REVIEWS
我试图在评论和城市之间找到子串

Epicure
Seb_on
Le_cherine
通过替换

  link["href"]

但是我没有找到正确的语法。有人能帮我找到正确的语法吗?谢谢。

/Reviews-()+)-City/
是从“XX评论WHATIWANT城市XX”中提取“WHATIWANT”的regexp

完整解决方案:

require 'nokogiri'

html = <<-EOF
<span class="reviewCount">
<a href="XX-Reviews-WHATIWANT-City-XX" target="_blank" onclick="XX;">1,361 reviews</a>
</span>
EOF

doc = Nokogiri::HTML(html)
doc.xpath("//span[@class='reviewCount']/a").each do |node|
  puts node.attribute("href").to_s[/Reviews-((.)+)-City/, 1]
end
需要“nokogiri”

html=谢谢,但我之所以选择XX是因为它们是动态的,并且不断变化。对于我正在解析的所有href,只有“评论-”和“-City”保持不变。有没有一种方法可以在不指定字节数的情况下使用\w?谢谢,抱歉,我认为这个问题不够详细。我已经给出了一些我试图解析的完整HREF的示例。我试图检索的子字符串之前的字节数可能会更改,因此我不确定\w{7}是否始终有效。@Bastien我希望现在我正确理解了所有内容谢谢。多亏了你的建议,我才尝试了这个方法,而且效果很好。
 "XX-Reviews-WHATIWANT-City"[/Reviews-((.)+)-City/, 1]
 #=> "WHATIWANT"
require 'nokogiri'

html = <<-EOF
<span class="reviewCount">
<a href="XX-Reviews-WHATIWANT-City-XX" target="_blank" onclick="XX;">1,361 reviews</a>
</span>
EOF

doc = Nokogiri::HTML(html)
doc.xpath("//span[@class='reviewCount']/a").each do |node|
  puts node.attribute("href").to_s[/Reviews-((.)+)-City/, 1]
end