रूबी स्ट्रिंग्स के लिए gsub और उप विधियों के बीच क्या अंतर है


111

मैं Stringआज के लिए दस्तावेज़ीकरण से इनकार कर रहा हूं , और मैंने वह :subविधि देखी , जिसे मैंने पहले कभी नहीं देखा था। मैं उपयोग कर रहा हूं :gsubऔर ऐसा प्रतीत होता है कि वे मूल रूप से समान हैं। क्या कोई मुझे अंतर समझा सकता है? धन्यवाद!


जवाबों:


208

gवैश्विक के लिए खड़ा है, के रूप में विश्व स्तर पर (सभी) की जगह:

Irb में:

>> "hello".sub('l', '*')
=> "he*lo"
>> "hello".gsub('l', '*')
=> "he**o"

13
हाँ। मैं अब समझता हूँ। मेरे बचाव में, मुझे नहीं लगता कि यह बहुत स्पष्ट था ... अब तक, यह है।
रेनमैट

15
मैं आपसे सहमत हूं कि यह स्पष्ट नहीं है! जावा इन replaceऔर कहता है replaceAll। लेकिन रूबी की जड़ें पर्ल में हैं जो gसंशोधक का उपयोग करती हैं। यह उन चीजों में से एक है।
रे तोल

1
सौभाग्य से, यह अब स्पष्ट है। मैं भविष्य में पता करूंगा।
रेयान्मट

वैसे, subबहुत तेजी से है gsub, वहाँ एक बेंचमार्क यहाँ है github.com/JuanitoFatas/fast-ruby/blob/master/code/string/...
JackXu

मैं इसे कुछ अलग व्यवहार देख रहा हूँ: A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" कोई भी विचार क्यों gsub!केवल regex समूहों का उपयोग करते समय केवल पहले उदाहरण को खोजने / बदलने के लिए प्रतीत होता है?
बेनेट टैलर्स

31

अंतर यह है कि subकेवल निर्दिष्ट पैटर्न की पहली घटना को प्रतिस्थापित gsubकरता है , जबकि यह सभी घटनाओं के लिए होता है (अर्थात, यह वैश्विक रूप से बदलता है)।


10
यदि आप एक मिनट पहले उत्तर देते, तो शायद 1020 और प्रतिनिधि आपके होते। :)
एंड्रयू ग्रिम

3
value = "abc abc"
puts value                                # abc abc
# Sub replaces just the first instance.
value = value.sub("abc", "---")
puts value                                # --- abc
# Gsub replaces all instances.
value = value.gsub("abc", "---")
puts value                                # --- ---

-2

subऔर gsubक्रमशः पहले और सभी मैचों का प्रतिस्थापन करें।

sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
    fixed = FALSE, useBytes = FALSE)

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
     fixed = FALSE, useBytes = FALSE)


sub("4", "8", "An Introduction to R Software Course will be of 4 weeks duration" )  
##"An Introduction to R Software Course will be of 8 weeks duration"

gsub("4", "8", "An Introduction to R Software Course will be of 4 weeks duration" )
##"An Introduction to R Software Course will be of 8 weeks duration"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.