2009-04-04 12 views
11

मैं "बच्चों की दुनिया" स्ट्रिंग में एस्ट्रोफ़े से पहले बैकस्लैश डालना चाहता हूं। क्या ऐसा करने का कोई आसान तरीका है?रूबी में एक स्ट्रिंग में एकल बैकस्लैश कैरेक्टर कैसे जोड़ें?

irb(main):035:0> s = "children's world" 
=> "children's world" 
irb(main):036:0> s.gsub('\'', '\\\'') 
=> "childrens worlds world" 

उत्तर

1

आपकी समस्या यह है कि स्ट्रिंग "\" "प्रतिस्थापन स्ट्रिंग में gsub के लिए सार्थक है। जिस तरह से आप चाहते हैं उसे काम करने के लिए, आपको ब्लॉक फॉर्म का उपयोग करना होगा।

s.gsub("'") {"\\'"} 
4
>> puts s.gsub("'", "\\\\'") 
children\'s world 
+1

यह बच्चों को \\ की दुनिया प्राप्त करता है। – Jirapong

+0

नहीं, यह नहीं है। – Magnar

+5

@ जिरापोंग जिस कारण से आप सोच रहे हैं वह \\ है क्योंकि रेल कंसोल स्ट्रिंग प्रदर्शित नहीं करता है, लेकिन यह दिखाता है कि कोई स्ट्रिंग कैसे बनाएगा। तो यदि आप "\\" दर्ज करते हैं, तो यह "\\" ईवेंट प्रदर्शित करने जा रहा है, हालांकि इसमें एक बैकस्लैश वाला स्ट्रिंग है। स्ट्रिंग में वास्तव में क्या है, यह जानने के लिए, आपको ** puts ** का उपयोग करना चाहिए। उदाहरण के लिए, "\\" एक बैकस्लैश प्रदर्शित करेगा। – Brian

11
ruby-doc.org प्रतिस्थापन पैटर्न के बारे में से

gsub के लिए:

दृश्यों \ 1 \ 2, और इतने पर मैच

में लगातार समूहों को जोड़ लिए इस्तेमाल किया जा सकता है

इसमें अनुक्रम \' शामिल है, जिसका अर्थ है "जो कुछ मैंने मिलान किया है उसके बाद सबकुछ"।

या तो "\\'" या '\\\'' दोनों \' (याद \ दोनों डबल और एकल उद्धृत तार में भाग निकले हो गया है कि निर्माण करते हैं, कि ' एकल उद्धृत तार में भाग निकले जा करने के लिए है, इसलिए इस में एकल उद्धरण का उपयोग कर है मामला वास्तव में चीजें और वर्बोज़ बनाता है)। उदा .:

puts "before*after".gsub("*", "\\'") 
"beforeafterafter" 

puts "before*after".gsub("*", '\\\'') 
"beforeafterafter" 

क्या आप gsub तो देखना चाहता हूँ वास्तव में \\', जो "\\\\'" और '\\\\\'' दोनों द्वारा उत्पादित किया जा सकता है। तो:

puts s.gsub("'", "\\\\'") 
children\'s world 

puts s.gsub("'", '\\\\\'') 
children\'s world 

या आप इस तथ्य का लाभ ले सकता है आप \ साथ एक बहुत कुछ करना है, तो यह है कि आप बैकस्लैश की दोबारा से बचने के लिए की जरूरत नहीं है जब आप /.../ (या %r{...}) का उपयोग करें:

puts s.gsub("'", /\\'/.source) 
children\'s world 
संबंधित मुद्दे