2013-08-27 51 views
-1

我想匹配">後的任何單詞。這是我的示例文本和要匹配的文本。與匹配方法相關的語法問題

<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*') 
    ^

我猜原因是干擾報價。

+1

這三行對我來說不會造成任何問題,當它粘貼到irb中的紅寶石塊時。我懷疑你的問題在上游。 –

回答

1

您必須在源代碼之前的某處丟失右括號。這就是它說你錯過關鍵字結束的意思。

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"> 
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的真實結構。