2010-02-05 4 views
8

Une question simple pour la plupart des experts regex je sais, mais j'essaie de retourner tous les mots pour les mots entre certaines accolades dans une phrase; Cependant, Ruby ne retourne qu'un seul match, et je n'arrive pas à comprendre pourquoi exactement.Regex pour faire correspondre tous les mots entre un ensemble d'accolades

J'utilise cet exemple phrase:

sentence = hello {name} is {thing} 

cette regex pour essayer de revenir à la fois "{name}" et "{} chose":

sentence[/\{(.*?)\}/] 

Cependant, Ruby est retourne seulement "{nom}". Quelqu'un peut-il expliquer pourquoi il ne correspond pas pour les deux mots?

+0

Parce que vous êtes seulement dire qu'il corresponde à la fois. (Si je connaissais réellement Ruby, je transformerais cela en une réponse.) –

Répondre

18

Vous êtes proche, mais en utilisant la mauvaise méthode:

sentence = "hello {name} is {thing}" 

sentence.scan(/\{(.*?)\}/) 
# => [["name"], ["thing"]] 
+0

Ahh, je regardais sous la classe Regex, je n'ai même pas vu cette méthode de scan sous String. Merci. Je l'ai modifié un peu à juste phrase.scan (/\{.*?\}/) comme je l'ai réalisé avec scan, je n'ai pas eu à faire les groupes, et d'inclure les accolades dans le match . Merci pour l'aide! – joeellis

Questions connexes