2012-05-31 46 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

相关问题