2010-08-13 13 views
5

मैं ट्रेलिंग स्लैश लगाने की अगर जरूरत कोशिश कर रहा हूँ के साथ की जरूरत:स्लेश अनुगामी कैसे जोड़ें यदि gsub

a = '/var/www' 
a.gsub 
... 

मैं इसे कैसे करना है पता नहीं है।

+6

मैं डॉन 'के अंत में एक वैकल्पिक / चरित्र पाता है की तुलना में एक एक लाइनर के रूप में आसान है मुझे लगता है कि मुझे रूबी में पिछली स्लैश जोड़ने की ज़रूरत नहीं है। क्या आप File.join के बारे में जानते हैं? http://ruby-doc.org/core/classes/File.html#M002545 –

+1

यह 'पथनाम' पुस्तकालय के बारे में भी सीखने योग्य है जो पथनामों के साथ काम करने के लिए एक संपूर्ण बीजगणित लागू करता है। –

उत्तर

0

यह बहुत अच्छी लग रही नहीं है .. लेकिन काम करता है:

टी = "कुछ पाठ"

टी [-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 बैकस्लैश कोड

+0

आप '? /' का उपयोग करना चाहते हैं जो आपको या तो वर्ण कोड (रूबी 1.8) या 1-वर्ण स्ट्रिंग (रूबी 1.9 पर) देगा और हमेशा टी [-1] ' –

0

निम्न स्क्रिप्ट से पता चलता है कि यह कैसे किया जा सकता है एक ही चरित्र के साथ लाइन का अंतिम वर्ण प्रतिस्थापन (अगर यह एक / नहीं है) के साथ साथ एकअनुगामी से काम करता हैभी।

2

तुम क्यों gsub का उपयोग करना चाहते हैं?

  1. आप प्रतिस्थापन नहीं कर रहे हैं
  2. आप प्रतिस्थापन कर रहे हैं (कुछ भी नहीं स्ट्रिंग से हटाया जा रहा है), और केवल जरूरत है यह एक ही स्थान पर किया, sub नहीं gsub का उपयोग करें।
  3. यदि आप प्रतिस्थापित कर रहे हैं, और स्ट्रिंग को संशोधित करना चाहते हैं, तो 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 
+0

के साथ संगत होगा जो काम नहीं करेगा एक [-1] चरित्र कोड वापस करेगा, चरित्र नहीं, आप कुछ और चाहते हैं: एक << '/' अगर एक [-1] .chr! = '/' – darkliquid

+0

@darkliquid: यह रूबी 1.9 में काम करता है । मेरा जवाब अपडेट किया गया, धन्यवाद। –

+0

1.8 संगतता का एक और मार्ग पथ << '/' पथ है [-1 ..- 1] == '/'। –

0

अलग-अलग तरीके के एक जोड़े कि पहले से ही कवर किया गया है, मिश्रण में एक और के जरिए कर रहे हैं:

(a << '/').gsub!('//','/') 

या

(a << '/').squeeze('/') 

यह ध्यान देने योग्य यह है कि उन दोनों के लिए '/' स्ट्रिंग में कहीं भी, हालांकि अगर आप सिर्फ रास्तों के साथ काम कर रहे हैं, कि संभावना नहीं है '//' के किसी भी मामले में परिवर्तित कर देंगे लायक है समस्याओं के कारण।

0
"/var/www".gsub(/[^\/]$/, '\1/') #=> "/var/www/" 
"/var/www/".gsub(/[^\/]$/, '\1/') #=> "/var/www/" 
+2

"example.com" .gsub (/ [^ \ /] $ /, '\ 1 /') # => "example.co/" – troynt

15

यहाँ थोड़ा अधिक पठनीय संस्करण

path << '/' unless path.end_with?('/') 
18
a = File.join(a, "") 

स्विफ्ट, आसान है, और गारंटी a एक पथ विभाजक में समाप्त होता है इस बात का प्रभाव पड़ता है; यही है, यह एक ही परिणाम देता है कि a"/var/www" या "/var/www/" है।

यह जो व्हाइट की टिप्पणी के ऊपर जैसा ही है; मुझे नहीं पता कि उसने इसे एक उत्तर के रूप में क्यों सबमिट नहीं किया, क्योंकि यह एक होने का हकदार है।

विचित्र रूप से, पथनाम लाइब्रेरी एक ही चीज़ करने का सुविधाजनक तरीका प्रदान नहीं करती है।

+3

कार्यात्मक रूप से बढ़िया है, लेकिन मुझे नहीं लगता कि मैं इसे अपने कोड में डाल सकता हूं एक टिप्पणी जोड़ने के बिना। –

0

सुंदर सरल gsub, जो संयोजन (< <)

a = '/var/www' 
a.gsub('/?$', '/') 

यह केवल स्ट्रिंग और प्रतिनिधि

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