2009-09-12 8 views
3

Je comprends comment vérifier un motif dans une chaîne avec regexp dans ruby. Ce que je suis confus sur est de savoir comment enregistrer le motif trouvé dans la chaîne comme une chaîne séparée.Ruby expressions régulières

Je pensais que je pourrais dire quelque chose comme:

if string =~ /regexp/ 
    pattern = string.grep(/regexp/) 

et je pourrais être avec ma vie. Toutefois, cela ne fonctionne pas comme prévu et renvoie la chaîne d'origine entière. Aucun conseil?

Répondre

6

Vous recherchez string.match() en ruby.

irb(main):003:0> a 
=> "hi" 
irb(main):004:0> a=~/(hi)/ 
=> 0 
irb(main):005:0> a.match(/hi/) 
=> #<MatchData:0x5b6e8> 
irb(main):006:0> a.match(/hi/)[0] 
=> "hi" 
irb(main):007:0> a.match(/h(i)/)[1] 
=> "i" 
irb(main):008:0> 

Mais aussi pour travailler avec ce que vous venez apparié à la condition if vous pouvez utiliser $&$1 .. $9 et $~ en tant que tels:

irb(main):009:0> if a =~ /h(i)/ 
irb(main):010:1> puts("%s %s %s %s"%[$&,$1,$~[0],$~[1]]) 
irb(main):011:1> end 
hi i hi i 
=> nil 
irb(main):012:0> 
+0

Works, apprécier – Atreides

3

Vous pouvez également utiliser les variables spéciales & $ et $ 1- $ n, comme ainsi:

if "regex" =~ /reg(ex)/ 
    puts $& 
    puts $1 
end 

Sorties:

regex 
ex 

$ ~ contient également l'objet MatchData. Voir aussi: http://www.regular-expressions.info/ruby.html.

Questions connexes