2010-02-05 21 views
8

Bildiğim çoğu regex uzmanı için basit bir soru, ancak bir cümlede küme ayraçları arasındaki tüm eşleşmeleri geri döndürmeye çalışıyorum; ancak Ruby sadece tek bir maçı geri döndürüyor ve neden tam olarak olduğunu anlayamıyorum. "{Name}" ve "{şey}" denemek ve hem dönmek için bu regex ileKıvırcık parantezler kümesi arasındaki tüm sözcükleri eşleştirmek için düzenli ifade

sentence = hello {name} is {thing} 

:

Bu örnek bir cümle kullanıyorum Ancak

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

, Ruby sadece "{name}" geri dönüyor. Neden her iki kelime için eşleşmediğini açıklayabilir mi?

+0

. (Ruby'yi gerçekten biliyor olsaydım, bunu bir cevap haline getirirdim.) –

cevap

18

Sen yakınsın ama yanlış yöntemi kullanarak: Eğer sadece bir kez maç için bunu söylüyorsun Çünkü

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

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

Ahh, Regex sınıfının altına bakıyordum, o tarama yöntemini String altında görmedim bile. Teşekkürler. Sadece taramayı gerçekleştirdiğim gibi, 'u değiştirdim, grupları yapmak zorunda değildim ve küme parantezini maça dahil etmedim . Yardım için teşekkürler! – joeellis

İlgili konular