2010-02-05 16 views
8

Proste pytanie dla większości ekspertów od regex, które znam, ale staram się zwrócić wszystkie dopasowania słów między niektórymi nawiasami klamrowymi w zdaniu; jednak Ruby powraca tylko jeden mecz i nie mogę zrozumieć, dlaczego dokładnie.Regex do dopasowywania wszystkich słów między seriami nawiasów klamrowych

Używam ten przykład zdanie:

sentence = hello {name} is {thing} 

z tym regex spróbować i powrócić zarówno "{nazwa}" oraz "{tam}":

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

Jednak Ruby jest tylko zwraca "{imię}". Czy ktoś może wyjaśnić, dlaczego nie pasuje do obu słów?

+0

bo jesteś tylko informując go dopasować raz. (Gdybym rzeczywiście znał Ruby, chciałbym zmienić to w odpowiedź.) –

Odpowiedz

18

Jesteś blisko, ale stosując niewłaściwą metodę:

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

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

Ahh, szukałem pod klasą Regex, nawet nie widziałem tej metody skanowania pod String. Dzięki. Zmodyfikowałem go nieco, by po prostu sentence.scan (/\{.*?\}/) jak zdałem sobie sprawę ze skanowania, nie musiałem robić grup, i włączać nawiasy klamrowe w meczu . Dzięki za pomoc! – joeellis

Powiązane problemy