मैं अपनी स्ट्रिंग में बैकस्लाश को दो बैकस्लैश के साथ प्रतिस्थापित करने की कोशिश कर रहा हूं:बैकस्लैश को डबल बैकस्लैश के साथ कैसे बदलें?
str.gsub!("\\", "\\\\")
लेकिन, यह कुछ भी नहीं करता है। मैं उलझन में हूँ ...
मैं अपनी स्ट्रिंग में बैकस्लाश को दो बैकस्लैश के साथ प्रतिस्थापित करने की कोशिश कर रहा हूं:बैकस्लैश को डबल बैकस्लैश के साथ कैसे बदलें?
str.gsub!("\\", "\\\\")
लेकिन, यह कुछ भी नहीं करता है। मैं उलझन में हूँ ...
ध्यान दें कि यह उत्तर रूबी 1.9 के संदर्भ में गिविन था। रूबी 2.0 के पास एक नया रेगेक्स इंजन है जो उस संदर्भ में मान्य नहीं हो सकता है।
यह काम करता है:
str.gsub!("\\", "\\\\\\")
str.gsub!("\\", "\\\\\\\\") # also, will always work
संपादित करें: स्पष्टीकरण (http://www.ruby-forum.com/topic/143645 के माध्यम से @vache द्वारा प्रदान की)
अस्वीकरण: मैं रूबी के regex इंजन की अंदरूनी कामकाज से परिचित नहीं हूँ, यहाँ कोई भी जानकारी उपर्युक्त आलेख से कटौती की जाती है।
पता करने के लिए बुनियादी बात यह है कि प्रतिस्थापन स्ट्रिंग का मूल्यांकन किया जाता है 2 बार है।
पहली बार स्लैश दूसरी बार gsub में, स्ट्रिंग में पलायन के रूप में अपने काम करने के समूह संदर्भ के लिए स्ट्रिंग खोज करेंगे।
के रूप में @ क्रिस-Johnsen उल्लेख किया है, 6 स्लैश alway काम नहीं करते। यह मैं ओर जाता है कुछ इस तरह हो रहा है विश्वास करने के लिए:
6 स्लैश के लिए। समूह संदर्भ परत में 3 स्लेश पास किए जाते हैं। पिछला स्लैश का अर्थ बचने वाले चरित्र के रूप में नहीं किया जाता है क्योंकि इसके बाद कुछ भी नहीं आ रहा है, इसे बैकस्लैश के रूप में व्याख्या किया जाता है। तो अंततः यह परत 2 स्लेश देता है। यदि कुछ भी इसका पीछा कर रहा है, तो अभिव्यक्ति विफल हो जाएगी, क्योंकि तीसरा स्लैश अब बचने वाले चरित्र के रूप में कार्य करेगा।
8 स्लैश के लिए: 4 स्लैश समूह संदर्भ परत को पास किया जाता है। बदले में चार स्लेश कम हो जाएंगे।
एक चर्चा [यहां] (http://www.ruby-forum.com/topic/143645) कारण है कि यह इस तरह है के बारे में नहीं है। – Vache
मैं इसे 8 (!) बैकस्लाश के साथ आज़मा रहा हूं और मुझे लगता है कि यह काम कर रहा है ... –
यदि आप स्पष्टीकरण जोड़ते हैं (वाचे का लिंक सहायक है), तो मैं आपका जवाब स्वीकार करूंगा। मुझे उन उत्तरों को स्वीकार करना पसंद नहीं है जो समाधान के बिना समाधान देते हैं कि यह समाधान क्यों है। साथ ही आप यह भी समझा सकते हैं कि यह 6 और 8 बैकस्लाश दोनों के साथ क्यों काम करता है, क्योंकि मुझे यह समझ में नहीं आता है कि ... –