2010-07-27 68 views
1

我期望捕获vspace之后的数字。你如何在正则表达式中做到这一点?这是一个示例字符串。正则表达式 - 如果存在匹配,则捕获一个数字

<img align="left" alt="dude its me" border="10" height="168" hspace="30" vspace="10" width="130" /> 

因此,最终结果将是10

+1

OT:有趣的你提供了这么多的属性,但你没有提到'src'。 :) – 2010-07-27 19:33:05

+3

没有src的在这个例子的制作中受到伤害:) – Trip 2010-07-27 19:44:00

回答

2
>> s = '<img align="left" alt="dude its me" border="10" height="168" hspace="30" vspace="10" width="130" />' 
>> /vspace="(\d+)"/.match(s)[1] 
=> "10" 

或者,如果你不知道它的存在与否:

if /vspace="(\d+)"/ =~ s 
    puts $1 
else 
    puts "no match" 
end 
+2

使用遵循Ruby约定的s.match(/.../)比从Perl继承的/.../ =〜s更具可读性,对于那些不熟悉的用户来说,看起来更像是线噪声这是什么意思。 – tadman 2010-07-27 20:36:34

0
/vspace="(\d+)"/$1/ 
+1

嗯。最后一块与$ 1。不知道我明白这一点。 – Trip 2010-07-27 19:27:38

+0

$ 1内容括号之间的内容即10与您的示例。我不知道RoR正则表达式,但我认为有类似的东西。 – Toto 2010-07-27 19:37:39

+0

为什么downvote? – Toto 2010-07-27 19:43:14

1

为了捕捉只是10试试这个:(?=\bvspace=")?(\d+)

/vspace="(\d+)"应匹配整个vspace="10"

2

请记住,可以用单引号,双引号或不带引号指定vspace。

n = Nokogiri::HTML(%Q{<img align="left" alt="dude its me" border="10" height="168" hspace="30" vspace="10" width="130" />}) 
n.css("img").first["vspace"] 

Never ever parse HTML with regular expressions.