2013-04-23 81 views
-1

我有標籤:如何在Ruby中使用正則表達式獲取值標記?

val = "<a href=\"https://mobile.twitter.com\" rel=\"nofollow\">Mobile Web</a>" 

在我的測試:

val[/(>.*<)/] 

返回:

>Mobile Web< 

我想返回文本:

Mobile Web 
+1

法則一,[不使用正則表達式解析HTML或XML(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained標籤都有效)。雖然它很誘人,但它也非常容易出錯並且很脆弱。相反,使用一個真正的解析器。這很容易,更穩定,更脆弱。 @Blender給了你正確的答案。 – 2013-04-23 05:47:08

回答

0

先行/ lookbehind wil我工作。

val[/(?<=>)(.*)(?=<)/] 
7

你可以用Nokogiri解析它:

require 'nokogiri' 

html = '<a href="https://mobile.twitter.com" rel="nofollow">Mobile Web</a>' 
elem = Nokogiri(html) 

puts elem.text 
+2

這是比接受的答案好得多的答案。正則表達式是解析html的錯誤工具。 – dbenhur 2013-04-23 05:11:26

+0

令人遺憾的是,OP沒有給出一個真實世界的HTML例子;像Nokogiri這樣的解析器的真正優勢並不明顯,也不是使用正則表達式的缺點。我們不知道通過什麼樣的陰謀來提取這條線,但是對於真實世界的使用,使用真正的分析器很容易。 – 2013-04-23 05:55:44

+0

Nokogiri太棒了!在大型應用程序中,性能較差!我更喜歡正則表達式! – 2013-04-23 18:39:44

2

你可以使用匹配,並與括號中選擇你想要的部分

/>(.*)</.match(val)[1] 

我會用一個HTML解析庫就像角度來說,Hpricot或nokogiri的HTML解析,但因爲可能會有很多角落情況與正則表達式,直到它在生產某個地方運行數月和休息之後纔會顯現!

+0

+1 fpr推薦Nokogiri。 -1給出一個正則表達式的答案。 – 2013-04-23 05:52:14

0
require 'nokogiri' 

html = '<a href="https://mobile.twitter.com" rel="nofollow">Mobile Web</a>' 
elem = Nokogiri::HTML::DocumentFragment.parse(html).child 

p elem.text #=> Mobile Web 
相關問題