2010-02-05 14 views
8

मुझे लगता है कि ज्यादातर रेगेक्स विशेषज्ञों के लिए एक सरल सवाल है, लेकिन मैं कुछ वाक्यों में एक घुमावदार ब्रेसिज़ के बीच शब्दों के लिए सभी मैचों को वापस करने की कोशिश कर रहा हूं; हालांकि रूबी केवल एक मैच लौट रही है, और मैं बिल्कुल समझ नहीं पा रहा हूं कि क्यों। "{नाम}" और "{बात}" कोशिश करते हैं और दोनों वापस जाने के लिए इस regex के साथघुंघराले ब्रेसिज़ के सेट के बीच सभी शब्दों से मेल खाने के लिए रेगेक्स

sentence = hello {name} is {thing} 

:

मैं इस उदाहरण वाक्य उपयोग कर रहा हूँ

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

हालांकि, रूबी है केवल "{name}" लौट रहा है। क्या कोई यह समझा सकता है कि यह दोनों शब्दों के लिए क्यों मेल नहीं खाता है?

+0

क्योंकि आप केवल एक बार मैच के लिए यह कह रहे हैं। (अगर मैं वास्तव में रूबी को जानता था, तो मैं इसे एक जवाब में बदल दूंगा।) –

उत्तर

18

आप निकट पहुंच गए हैं, लेकिन गलत विधि का उपयोग कर:

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

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

आह, मैं रेगेक्स कक्षा के नीचे देख रहा था, मैंने स्ट्रिंग के तहत स्कैन विधि भी नहीं देखी। धन्यवाद। मैंने इसे थोड़ा सा वाक्य.scan (/\{.*?\}/) जैसा कि मैंने स्कैन के साथ महसूस किया, मुझे समूहों को करने की ज़रूरत नहीं थी, और मैच में घुंघराले ब्रेसिज़ को शामिल करने के लिए । सहायता के लिए धन्यवाद! – joeellis

संबंधित मुद्दे