匹配方法的语法问题[关闭]

问题描述 投票:-1回答:2

我想匹配">之后的任何单词。这是我的示例文本和要匹配的文本。

<a href="http://www.foo.bar">example_text (a)</a>

要抓取的文字:

example_text

这是我的代码:

$page_html = Nokogiri::HTML.parse($browser.html)
$holder = $page_html.xpath('/html/body/div[2]/div[5]/div/table/tbody/tr[4]/td/a')
$user = $holder.match('(?<=\"\>)\w*')

而我的错误:

syntax error, unexpected tIDENTIFIER, expecting keyword_end
$user = $holder.match('(?<=\"\>)\w*')
      ^

我猜的原因是报价干扰了。

ruby regex nokogiri match
2个回答
2
投票

你的“意想不到的tIDENTIFIER”错误来自其他地方,你应该得到一个

undefined method `match' for #<Nokogiri::XML::NodeSet:...>

错误,因为xpath给你一个Nokogiri::XML::NodeSet和那些没有match方法。

您的XPath表达式似乎唯一标识您所追求的单个<a>,因此您应该使用at获取节点,然后使用text来提取内容:

text = $page_html.at(...).text

然后你可以简单地split关闭第一个词:

user = text.split.first

此外,您需要小心XPath:

/html/body/div[2]/div[5]/div/table/tbody/tr[4]/td/a

看起来它来自浏览器,一些浏览器会将<tbody>元素插入<table>s,但Nokogiri不会。您可能需要调整XPath以匹配您正在抓取的HTML的实际结构。


1
投票

你必须在源代码的某个地方错过一个结束括号。当它说你错过了关键字end时,这意味着什么。

2.0.0p0 :004 > $holder = '<a href="http://www.foo.bar">example_text (a)</a>'
 => "<a href=\"http://www.foo.bar\">example_text (a)</a>" 
2.0.0p0 :005 > $user = $holder.match('(?<=\"\>)\w*')
 => #<MatchData "example_text"> 
© www.soinside.com 2019 - 2024. All rights reserved.