2012-09-05 13 views
5

मुझे समझ में क्यों झूठी निम्नलिखित रिटर्न कोशिश कर रहा हूँ में: (** मैं" आउटपुट 0 "** करने चाहिए थे)मैच न्यू लाइन ` n` माणिक regex

puts "a\nb" =~ Regexp.new(Regexp.escape("a\nb"), Regexp::MULTILINE | Regexp::EXTENDED) 

संभवतः किसी ने समझा सकता है।

मैं एक बहु-रेखा स्ट्रिंग से रेगेक्स उत्पन्न करने की कोशिश कर रहा हूं जो स्ट्रिंग से मेल खाएगा।

अग्रिम

उत्तर

9

puts हमेशा nil वापस आ जाएगी।

आपका कोड ठीक काम करता है, हालांकि लंबे समय तक। =~ रिटर्न मैच में 0.

है की स्थिति को आप भी इस्तेमाल कर सकते हैं:

"a\nb" =~ /a\sb/m 

या

"a\nb" =~ /a\nb/m 

नोट: m विकल्प इस उदाहरण में आवश्यक नहीं है लेकिन दर्शाता है कि कैसे इसका उपयोग Regexp.new के बिना किया जाएगा।

+0

क्या कोई ऐसी विधि है जो एक बूलियन लौटाती है यदि स्ट्रिंग एक Regexp से मेल खाता है? – Arth

+2

@Arth आप यह कर सकते हैं: '!! (" एक \ nb "= ~/a \ sb/m)' –

+0

क्या कर सकता था! आश्चर्यचकित है कि स्ट्रिंग या रेगेक्सपी कक्षा में फ़ंक्शन में कोई अंतर्निहित कार्य नहीं है। – Arth

1

धन्यवाद शायद, puts वजह से इस

1.9.3-194 (main):0 > puts ("a\nb" =~ Regexp.new(Regexp.escape("a\nb"), Regexp::MULTILINE | Regexp::EXTENDED)) 
0 
=> nil 


1.9.3-194 (main):0 > "a\nb" =~ Regexp.new(Regexp.escape("a\nb"), Regexp::MULTILINE | Regexp::EXTENDED) 
=> 0 
+0

मुझे समझ में नहीं आ रहा है, मैं पूछताछ कर रहा था कि कोई मिलान क्यों नहीं है। – Arth

+1

मिलान की स्थिति 0 – sumskyi

+0

वापस आ गया था, आह, अब मैं समझता हूं, अनुमान लगाओ कि मैंने = ~ ऑपरेटर को गलत समझा। – Arth

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