Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Gsub与正则表达式_Ruby_Watir - Fatal编程技术网

Ruby Gsub与正则表达式

Ruby Gsub与正则表达式,ruby,watir,Ruby,Watir,我有一个网页。HTML源包含以下文本: <meta property="og:title" content="John"/> 约翰就是一个例子,名字可能会有所不同。 我确信og:title在文本中只出现一次。 这是我的代码: $browser.goto( url ) x = $browser.html.gsub( /^.*<meta property="og:title" content="(.+?)".>/m, '\1' ) $browser.goto(url)

我有一个网页。HTML源包含以下文本:

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

约翰就是一个例子,名字可能会有所不同。 我确信og:title在文本中只出现一次。 这是我的代码:

$browser.goto( url )
x = $browser.html.gsub( /^.*<meta property="og:title" content="(.+?)".>/m, '\1' )
$browser.goto(url)
x=$browser.html.gsub(/^.*/m,“\1”)
我希望在变量x中找到John这个名字 “\1”应该给出我放在括号中的第一部分,即(.+?),即John,对吗?
还有,我用了一个点。要匹配斜杠/,有更好的方法吗?

该代码将返回所有HTML,并将匹配的代码(从字符串开头到/>)替换为“John”。这就归结为“John”,后面是该meta属性的/>之后的HTML

如果您只想提取名称,并且该标记只出现一次,则可以使用以下方法:

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

@browser.html=~/该代码将返回所有html,匹配的代码(从字符串开头到/>之间的所有内容)将替换为“John”。这就归结为“John”,后面是该meta属性的/>之后的HTML

如果您只想提取名称,并且该标记只出现一次,则可以使用以下方法:

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

x = browser.meta.attribute_value "content"
我无法使用
css
xpath
使用Watir-API访问
meta
元素:

x = browser.meta.attribute_value "content"

如果您只需要
content
的值,我无法使用
css
xpath
访问
meta
元素:

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

如果您不熟悉正则表达式,
“([^”]+)”
可能会将您抛出。它的意思是“从第一个
,抓取所有内容直到下一个
。实际上,它的意思是“抓取双引号内的所有内容。

如果您只想要
内容的值

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

如果您不熟悉正则表达式,
“([^”]+)”
可能会将您抛出。它的意思是“从第一个
,抓取所有内容直到下一个
。实际上,它的意思是“抓取双引号内的所有内容。

那么,您想要变量
x
内容
属性的值吗?您试图完成什么,使用多少标记?除了简单的使用之外,你还应该使用解析器,因为只要页面发生变化,正则表达式就会严重崩溃。那么,您是在要求一种更好的方法来实现这一点,还是代码不适合您?如果是后者,那么x得到了什么?那么,您想要变量
x
content
属性的值?您试图实现什么,以及使用了多少标记?除了简单的使用之外,你还应该使用解析器,因为只要页面发生变化,正则表达式就会严重崩溃。那么,您是在要求一种更好的方法来实现这一点,还是代码不适合您?如果是后者,那么x得到了什么?我更感兴趣的是学习regexp,所以我的理想答案应该告诉我我所做的有什么错。首先使用regex是错误的,所以Zeljko的答案应该被接受。我更感兴趣的是学习regexp,因此,我的理想答案应该告诉我我所做的有什么错。首先,使用正则表达式是错误的,所以Zeljko的答案应该被接受