রুবি স্ট্রিংয়ের জন্য জিএসব এবং সাব পদ্ধতির মধ্যে পার্থক্য কী


111

আমি Stringআজকের জন্য ডকুমেন্টেশন অনুধাবন করছি , এবং আমি :subপদ্ধতিটি দেখেছি , যা আমি আগে কখনই লক্ষ্য করিনি। আমি ব্যবহার করছি :gsubএবং এটি প্রদর্শিত হয় যে তারা মূলত একই। কেউ আমাকে পার্থক্য ব্যাখ্যা করতে পারেন? ধন্যবাদ!


উত্তর:


208

gবিশ্বব্যাপী ঘোরা, হিসাবে বিশ্বব্যাপী (সমস্ত) প্রতিস্থাপন করুন:

আইআরবি ইন:

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

13
হ্যাঁ। আমি এখন বুঝতে পেরেছি. আমার প্রতিরক্ষার পক্ষে, আমি মনে করি না এটি খুব সুস্পষ্ট ছিল ... এখন অবধি, এটি।
রায়য়ান্ট

15
আমি আপনার সাথে একমত যে এটি সুস্পষ্ট নয়! জাভা এগুলি কল করে replaceএবং replaceAll। তবে রুবির পার্লতে এর শেকড় রয়েছে যা gমডিফায়ার ব্যবহার করে । এটি those জিনিসগুলির মধ্যে একটি মাত্র।
রায় তোয়াল

1
ভাগ্যক্রমে, এটা এখন সুস্পষ্ট। আমি ভবিষ্যতে জানতে পারি।
রায়য়ান্ট

যাইহোক, subতুলনায় অনেক দ্রুত gsub, এখানে একটি বেঞ্চমার্ক রয়েছে github.com/
জুয়ানিটো

আমি এর সাথে কিছু ভিন্ন আচরণ দেখছি: A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" কোনও ধারণা কেন gsub!কেবলমাত্র রেগেক্স গ্রুপগুলি ব্যবহার করার সময় কেবল প্রথম নজিরটিকে সন্ধান / প্রতিস্থাপন করে বলে মনে হচ্ছে?
বেনেট টাল্পার্স

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"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.