2010-02-15 9 views
14

मैं जैसे कुछ के साथ ' जैसे उद्धरण को प्रतिस्थापित करने का तरीका जानने का प्रयास कर रहा हूं।रूबी में 'साथ ' बदलें?

मैं यह कैसे करूँगा?

मैं

"'".gsub("'","\\'") 

की कोशिश की है, लेकिन यह सिर्फ एक खाली स्ट्रिंग देता है। मुझसे यहां क्या गलत हो रहा है?

+0

मैं संपादित मेरा उत्तर – marcgg

+0

मुझे उम्मीद है कि आप एसक्यूएल इनपुट से बचने की कोशिश नहीं कर रहे हैं। हमेशा अपने बयान तैयार करें। –

+0

नहीं, यह कोड से बच रहा है, लेकिन एसक्यूएल नहीं। – Earlz

उत्तर

27

कैसे के बारे में इस

puts "'".gsub("'","\\\\'") 
\' 

कारण यह है कि इसका मतलब है \' gsub (regex) में मैच के बाद और है, क्योंकि इस बात का यह जरूरत \\' और \ से बचने के लिए \\ के रूप में स्पष्ट रूप से बच निकला है,के साथ समाप्त हो रहा है।

उदाहरण

>> "abcd".gsub("a","\\'") 
=> "bcdbcd" 

aa के बाद सब कुछ बदल जाता है।

+0

मेरे लिए यह समझाने के लिए धन्यवाद .. मुझे लगता है कि gsub में कुछ छिपी हुई "विशेषताएं" हैं – Earlz

-1

यह कैसे करने के बारे में:

"'".gsub("\\","\\\\\\\\").gsub("'","\\\\'") 
नहीं

सुंदर, लेकिन मैं यह काम करता है लगता है ...

+0

विनाशकारी संस्करण या तो काम नहीं करता है। बस irb प्रॉम्प्ट से एक रिक्त स्ट्रिंग वापस देता है – Earlz

+0

ठीक है, मुझे इसे देखने दें – marcgg

+0

रूबी संस्करण 'रूबी 1.8.6 (200 9-06-08 पैचलेवल 36 9) [x86_64-openbsd4.6]' – Earlz

0

यह एक बग हो सकता है .. या बहुत कम से कम, जो कुछ के लिए मेरा विचार टूट जाता है कम से कम आश्चर्य का सिद्धांत।

irb(main):039:0> "life's grand".gsub "'", "\\\'" 
=> "lifes grands grand" 
irb(main):040:0> "life's grand".gsub "'", "\\\\'" 
=> "life\\'s grand" 
+0

हां, यह है मुझे समझ में नहीं आ रहा है .. यकीन है कि मैं इसके लिए रेगेक्स का उपयोग कर सकता हूं, लेकिन यह ओवरकिल जैसा लगता है। – Earlz

2

$' चर मैच के दाईं ओर स्ट्रिंग है। gsub प्रतिस्थापन स्ट्रिंग में, वही चर \' होगा - इसलिए समस्या।

x = "'foo'" 
x.gsub!(/'/, "\\'") 
puts x.inspect  # foo'foo 

यह काम करना चाहिए:

x = "'foo'" 
x.gsub!(/'/, "\\\\'") 
puts x.inspect 
puts x 
0

एक दो कदम दृष्टिकोण मैं वास्तव में उपयोग किया है ...

BACKSLASH = 92.chr 
temp = "'".gsub("'", "¤'") 
puts temp.gsub("¤", BACKSLASH) 
=> "\'" 

केवल तभी कार्य करेगा '¤' पाठ स्पष्ट रूप में नहीं किया जाता है ...

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