চলুন রুবির gsub মেথড এবং কীভাবে ব্যবহার করবেন সেটি নিয়ে কথা বলি। প্রথমে, এই মেথডের সাথে খেলার জন্য আপনার কাছে একটি স্ট্রিং দরকার।
কেন?
কারণ gsub-র পুরো পয়েন্ট হচ্ছে একটি স্ট্রিংয়ের অংশগুলো রিপ্লেস করা।
বস্তুত:
"gsub"-এ "sub" বলতে "substitute" বোঝায়, এবং "g" বলতে "global" বোঝায়।
এখানে একটি উদাহরণ স্ট্রিং:
str = "white chocolate"
মান লিন আমরা "white" শব্দটি "dark" শব্দ দিয়ে রিপ্লেস করতে চাই।
এভাবে:
str.gsub("white", "dark")
এটি বোঝাচ্ছে:
str স্ট্রিং দেওয়া, প্রথম শব্দ (white) এর সকল অকারেন্সকে দ্বিতীয় শব্দ (dark) দিয়ে রিপ্লেস করো।
অর্থাৎ আমরা অনেক ভালো চকোলেট খেতে পারব।
ওহ, ওপস, এটা শুধু একটি স্ট্রিং।
আমরা সেটি খেতে পারবো না! 🙂
যাই হোক…
রুবির gsub মেথড সিম্পল সাবস্টিটিউশন এর চেয়ে অনেক বেশি করতে পারে।
চলুন কিছু উদাহরণ দেখি।
রেগুলার এক্সপ্রেশন দিয়ে প্যাটার্ন রিপ্লেস করুন
একটি শব্দ রিপ্লেস করা ঠিক আছে।
কিন্তু আপনি যদি একটি প্যাটার্ন রিপ্লেস করতে পারতেন?
যেমন:
এক বছর, একটি ইমেইল অ্যাড্রেস, একটি ফোন নাম্বার, ইত্যাদি।
আপনি পারেন!
এখানে একটি উদাহরণ:
"a1".gsub(/\d/, "2") # "a2"
প্রথম আর্গুমেন্ট হলো একটি রেগুলার এক্সপ্রেশন, এবং এটিই কভার করা অত্যধিক।
কিন্তু এটি একটি প্যাটার্ন-ম্যাচিং ল্যাঙ্গুয়েজ।
এই কেসে, \d নম্বর খুঁজে, যেমন "a1"-এ নম্বর "১"।
আপনি এটিও করতে পারেন:
"a1".gsub(/(\w)(\d)/, '\2\1')
ফলাফল:
"1a"
আমরা অর্ডার বদলিয়ে দিলাম!
এটি "ক্যাপচার গ্রুপস" নামক একটি ফিচার দিয়ে কাজ করে।
আমরা গ্রুপগুলো \1 প্রথম গ্রুপের জন্য, \2 দ্বিতীয় গ্রুপের জন্য, ইত্যাদি হিসেবে ব্যবহার করতে পারি।
গ্রুপগুলো প্যারেন্থেসিস দিয়ে তৈরি হয়।
ব্লকসহ এডভান্সড Gsub
জিনিসগুলো richtig আকর্ষণীয় হয়ে যায় যখন আপনি gsub-কে একটি ব্লকসহ ব্যবহার শুরু করেন।
কেন?
কারণ একটি ব্লকের ভিতরে আপনি লজিক ব্যবহার করে ডिसাইড করতে পারেন কীভাবে কিছু রিপ্লেস করবেন।
একটি স্ট্যাটিক ভ্যালু ব্যবহার করার বদলে।
উদাহরণ:
"dog".gsub(/\w+/) { |animal| animal == "dog" ? "cat" : "dog" }
আমরা \w+ দিয়ে এনিমাল খুঁজে পাই, যার মানে "এক বা একাধিক অ্যালফানিউমেরিক ক্যারেক্টার"।
তারপর:
- যদি এটি "dog" হয়, আমরা এটিকে "cat" দিয়ে রিপ্লেস করি
- যদি শব্দটি অন্য কিছু হয়, আমরা এটিকে "dog" দিয়ে রিপ্লেস করি
এই ধরনের লজিক gsub-এর ২য় প্যারামিটার হিসেবে একটি স্ট্যাটিক ভ্যালু দিয়ে সম্ভব নয়।
হ্যাশ দিয়ে একাধিক টার্ম রিপ্লেস করুন
আপনার কাছে যদি সাবস্টিটিউশন করার একটি লিস্ট থাকে তবে আপনি একটি হ্যাশ ব্যবহার করতে পারেন।
একটি এরকম হ্যাশ:
colors = { "B" => "blue", "G" => "green", "R" => "red" }
এটি একটি ট্রান্সলেশন ডিকশনারির মত কাজ করে, যেখানে কিগুলো তাদের ভ্যালু দিয়ে রিপ্লেস হবে।
এখানে একটি উদাহরণ:
"BBBGR".gsub(/\w/, colors)
ফলাফল:
"bluebluebluegreenred"
নিশ্চিত করুন যে আপনার ১ম আর্গুমেন্ট কিগুলোর সাথে ম্যাচ করবে।
এই কেসে, \w ইন্ডিভিজুয়াল ক্যারেক্টার ম্যাচ করে, তাই এটি "B" ম্যাচ করে এবং "blue" দিয়ে রিপ্লেস করে।
সারসংক্ষেপ
আপনি রুবিতে gsub মেথড সম্পর্কে শিখেছেন! এটি একটি শক্তিশালী মেথড যা আপনাকে একটি স্ট্রিংয়ের ভিতরে ক্যারেক্টার রিপ্লেস বা সাবস্টিটিউট করতে দেয়।
এর বহুবিধ ব্যবহার রয়েছে:
- ইনভ্যালিড ক্যারেক্টার রিমুভ করা (২য় আর্গুমেন্টকে খালি স্ট্রিং বানিয়ে)
- প্লেসহোল্ডার এবং এক্রোনিমকে তাদের পূর্ণ ভ্যালু দিয়ে রিপ্লেস করা
- প্যাটার্ন এবং লজিক ব্যবহার করে একটি স্ট্রিং পরিবর্তন করা

এখন আপনার পালা এই মেথড দিয়ে প্র্যাক্টিস করার যাতে আপনার নতুন জ্ঞান জমে যায়।
পড়ার জন্য ধন্যবাদ 🙂