2010-07-27 3 views
1

Je cherche à capturer juste le nombre après vspace. Comment feriez-vous cela dans regex? Voici un exemple de chaîne.Regex - Capture d'un nombre si une correspondance existe

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

Ainsi, le résultat final serait 10

+1

OT: drôle vous fourni tant d'attributs, mais vous ne mentionne pas 'src'. :) –

+3

Aucun src ont été blessés dans la fabrication de cet exemple :) – Trip

Répondre

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" 

ou, si vous n'êtes pas sûr si elle existe ou non:

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

Il est probablement plus facile d'utiliser s.match (/.../) qui suit la convention Ruby que /.../ = ~ s héritée de Perl et ressemble beaucoup plus à du bruit de ligne pour ceux qui ne sont pas familiers avec ce que cela veut dire. – tadman

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

Hmm. cette dernière pièce avec le 1 $. Je ne suis pas sûr de comprendre cela. – Trip

+0

$ 1 contenu ce qui est entre parenthèses, c'est-à-dire 10 avec votre exemple. Je ne connais pas RoR regex mais je présume qu'il y a quelque chose de similaire. – Toto

+0

Pourquoi la downvote? – Toto

1

Pour capturer seulement le 10 Essayez celui-ci: (?=\bvspace=")?(\d+)

/vspace="(\d+)" doit correspondre à l'ensemble des vspace="10"

2

En gardant à l'esprit que le vspace pourrait être spécifiée avec des guillemets simples, des guillemets doubles ou sans guillemets.

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.

Questions connexes