मैं ट्रेलिंग स्लैश लगाने की अगर जरूरत कोशिश कर रहा हूँ के साथ की जरूरत:स्लेश अनुगामी कैसे जोड़ें यदि gsub
a = '/var/www'
a.gsub
...
मैं इसे कैसे करना है पता नहीं है।
मैं ट्रेलिंग स्लैश लगाने की अगर जरूरत कोशिश कर रहा हूँ के साथ की जरूरत:स्लेश अनुगामी कैसे जोड़ें यदि gsub
a = '/var/www'
a.gsub
...
मैं इसे कैसे करना है पता नहीं है।
यह बहुत अच्छी लग रही नहीं है .. लेकिन काम करता है:
टी = "कुछ पाठ"
टी [-1] == 47? टी:
a="/var/www"; print a + "\n"; a = a.gsub(/([^\/]$)/, '\1/'); print a + "\n"; a = a.gsub(/([^\/]$)/, '\1/'); print a + "\n";
यह आउटपुट:
/var/www /var/www/ /var/www/
और टी + "/"
47 बैकस्लैश कोड
आप '? /' का उपयोग करना चाहते हैं जो आपको या तो वर्ण कोड (रूबी 1.8) या 1-वर्ण स्ट्रिंग (रूबी 1.9 पर) देगा और हमेशा टी [-1] ' –
निम्न स्क्रिप्ट से पता चलता है कि यह कैसे किया जा सकता है एक ही चरित्र के साथ लाइन का अंतिम वर्ण प्रतिस्थापन (अगर यह एक /
नहीं है) के साथ साथ एकअनुगामी से काम करता हैभी।
तुम क्यों gsub का उपयोग करना चाहते हैं?
sub
नहीं gsub
का उपयोग करें।sub!
या gsub!
का उपयोग करें।जब से तुम प्रतिस्थापन नहीं कर रहे हैं, बस स्लेश संलग्न अगर जरूरत:
path << '/' if path[-1] != '/' # Make sure path ends with a slash
अद्यतन: यह रूबी (1.8.x) के पुराने संस्करणों के साथ संगत बनाने के लिए, यह थोड़ा सा संशोधन :
path << '/' if path[-1].chr != '/' # Make sure path ends with a slash
के साथ संगत होगा जो काम नहीं करेगा एक [-1] चरित्र कोड वापस करेगा, चरित्र नहीं, आप कुछ और चाहते हैं: एक << '/' अगर एक [-1] .chr! = '/' – darkliquid
@darkliquid: यह रूबी 1.9 में काम करता है । मेरा जवाब अपडेट किया गया, धन्यवाद। –
1.8 संगतता का एक और मार्ग पथ << '/' पथ है [-1 ..- 1] == '/'। –
अलग-अलग तरीके के एक जोड़े कि पहले से ही कवर किया गया है, मिश्रण में एक और के जरिए कर रहे हैं:
(a << '/').gsub!('//','/')
या
(a << '/').squeeze('/')
यह ध्यान देने योग्य यह है कि उन दोनों के लिए '/' स्ट्रिंग में कहीं भी, हालांकि अगर आप सिर्फ रास्तों के साथ काम कर रहे हैं, कि संभावना नहीं है '//' के किसी भी मामले में परिवर्तित कर देंगे लायक है समस्याओं के कारण।
"/var/www".gsub(/[^\/]$/, '\1/') #=> "/var/www/"
"/var/www/".gsub(/[^\/]$/, '\1/') #=> "/var/www/"
"example.com" .gsub (/ [^ \ /] $ /, '\ 1 /') # => "example.co/" – troynt
यहाँ थोड़ा अधिक पठनीय संस्करण
path << '/' unless path.end_with?('/')
a = File.join(a, "")
स्विफ्ट, आसान है, और गारंटी a
एक पथ विभाजक में समाप्त होता है इस बात का प्रभाव पड़ता है; यही है, यह एक ही परिणाम देता है कि a
"/var/www"
या "/var/www/"
है।
यह जो व्हाइट की टिप्पणी के ऊपर जैसा ही है; मुझे नहीं पता कि उसने इसे एक उत्तर के रूप में क्यों सबमिट नहीं किया, क्योंकि यह एक होने का हकदार है।
विचित्र रूप से, पथनाम लाइब्रेरी एक ही चीज़ करने का सुविधाजनक तरीका प्रदान नहीं करती है।
कार्यात्मक रूप से बढ़िया है, लेकिन मुझे नहीं लगता कि मैं इसे अपने कोड में डाल सकता हूं एक टिप्पणी जोड़ने के बिना। –
सुंदर सरल gsub, जो संयोजन (< <)
a = '/var/www'
a.gsub('/?$', '/')
यह केवल स्ट्रिंग और प्रतिनिधि
मैं डॉन 'के अंत में एक वैकल्पिक
/
चरित्र पाता है की तुलना में एक एक लाइनर के रूप में आसान है मुझे लगता है कि मुझे रूबी में पिछली स्लैश जोड़ने की ज़रूरत नहीं है। क्या आप File.join के बारे में जानते हैं? http://ruby-doc.org/core/classes/File.html#M002545 –यह 'पथनाम' पुस्तकालय के बारे में भी सीखने योग्य है जो पथनामों के साथ काम करने के लिए एक संपूर्ण बीजगणित लागू करता है। –