2012-05-31 48 views
0

我有一個網頁。 HTML源代碼包含以下文本:Gsub和正則表達式

<meta property="og:title" content="John"/> 

約翰是一個例子,名字可能會有所不同。 我相信og:title只會在文本中出現一次。 這是我的代碼:

$browser.goto(url) 
x = $browser.html.gsub(/^.*<meta property="og:title" content="(.+?)".>/m, '\1') 

我希望找到的名字John在我的變量x 的「\ 1」應該給我,我把括號,即,即第一部分(+?)約翰,對吧? 另外,我用了一個點。匹配斜線/,有沒有更好的方法?

+0

那麼,你想要變量'x'中'content'屬性的值? –

+1

你想完成什麼,以及你使用了多少個標籤?對於任何不重要的用途,你應該使用一個解析器,因爲正則表達式可以在頁面改變的任何時候壞掉。 –

+0

是的,Željko,我想那 –

回答

1

如果你只想要content值:

html = '<meta property="og:title" content="John"/>' 
=> "<meta property=\"og:title\" content=\"John\"/>" 
html[/property="og:title" content="([^"]+)"/, 1] 
=> "John" 

如果你不熟悉正則表達式,"([^"]+)"可能會引發你。這意味着「從第一個",抓住一切,直到下一個"。實際上它意味着」抓住雙引號內的一切。

1

該代碼將返回所有的HTML,匹配的代碼(這是字符串開始到包括/>之間的所有內容)由'John'替換。所以歸結爲「約翰」,其次是該元屬性的/>之後的HTML。

如果你只是要提取的名稱和標籤只發生一次,就可以使用這樣的:我無法訪問

x = browser.meta.attribute_value "content" 

@browser.html =~ /<meta property="og:title" content="(.+?)"/ 
x = $1 
2

使用的Watir API使用cssxpathmeta元素。

+0

我對學習正則表達式更感興趣,所以我的理想答案應該告訴我我做了什麼錯了 –

+0

首先使用正則表達式是錯誤的,所以應該接受Zeljko的答案 – pguardiario

相關問題