Regular Expressions (RegEx) হলো একটি বিশেষ ধরনের প্যাটার্ন যা স্ট্রিং (string) এর মধ্যে নির্দিষ্ট মাপকাঠি অনুযায়ী মেলানো (matching) এবং অনুসন্ধান করার জন্য ব্যবহৃত হয়। এটি একাধিক স্ট্রিং বা টেক্সটের মধ্যে প্যাটার্ন খুঁজে বের করতে এবং সেই অনুযায়ী টেক্সট প্রক্রিয়াজাত করতে সাহায্য করে। জুলিয়া প্রোগ্রামিং ভাষায় স্ট্রিং ম্যানিপুলেশন এবং প্যাটার্ন অনুসন্ধান করার জন্য Regex খুবই শক্তিশালী একটি টুল।
Regular Expressions (RegEx) এর মৌলিক ধারণা
RegEx একটি বিশেষ ভাষা যা স্ট্রিং প্যাটার্ন তৈরি করতে ব্যবহৃত হয়। এটি স্ট্রিংয়ে নির্দিষ্ট প্যাটার্ন অনুসন্ধান, যাচাই, এবং পরিবর্তন করতে ব্যবহার করা হয়।
RegEx সিম্বলস (Symbols)
.: যেকোনো একক চরিত্র^: স্ট্রিংয়ের শুরু$: স্ট্রিংয়ের শেষ*: পূর্ববর্তী চরিত্র শূন্য বা তার বেশি বার পুনরাবৃত্তি হতে পারে+: পূর্ববর্তী চরিত্র একবার বা তার বেশি বার পুনরাবৃত্তি হতে পারে?: পূর্ববর্তী চরিত্র শূন্য বা একবার থাকতে পারে[]: একটি সেট বা ক্লাস (যেমন,[a-z]সব ছোট অক্ষর)|: OR অপারেটর (যেমন,a|bমানে 'a' অথবা 'b')(): গ্রুপিং, প্যাটার্নের অংশ হিসাবে
বেসিক RegEx প্যাটার্ন উদাহরণ
a.: যেকোনো 'a' চরিত্রের পর যে কোনো একক চরিত্র।^abc: 'abc' দিয়ে শুরু হওয়া যে কোনো স্ট্রিং।abc$: 'abc' দিয়ে শেষ হওয়া যে কোনো স্ট্রিং।\d: যে কোনো ডিজিট (0-9)।[a-z]: এক ছোট হাতের অক্ষর।[A-Za-z]: একটি অক্ষর (ছোট বা বড়)।\w: অক্ষর, সংখ্যা অথবা আন্ডারস্কোর (_), অর্থাৎ একটি শব্দের অংশ।
জুলিয়াতে Regular Expressions ব্যবহার করা
জুলিয়া প্রোগ্রামিং ভাষায় Regular Expressions এর জন্য Regex টাইপ ব্যবহার করা হয়। স্ট্রিং ম্যানিপুলেশন ও মেলানোর জন্য জুলিয়া ismatch(), match(), replace() এবং split() ফাংশন সরবরাহ করে।
১. String Matching with Regular Expressions
ismatch() ফাংশন
ismatch() ফাংশনটি একটি স্ট্রিংয়ের সাথে নির্দিষ্ট RegEx প্যাটার্ন মেলানোর জন্য ব্যবহার করা হয়। এটি যদি প্যাটার্নটি স্ট্রিংয়ে খুঁজে পায়, তাহলে true ফেরত দেয়, নাহলে false।
pattern = r"^Hello"
str = "Hello, World!"
println(ismatch(pattern, str)) # আউটপুট: trueএখানে, ^Hello প্যাটার্নটি স্ট্রিংয়ের শুরুতে "Hello" মেলানোর জন্য ব্যবহার করা হয়েছে, এবং ismatch() ফাংশনটি true ফেরত দিচ্ছে কারণ স্ট্রিংটি "Hello" দিয়ে শুরু হয়।
match() ফাংশন
match() ফাংশনটি যদি একটি প্যাটার্ন স্ট্রিংয়ে পাওয়া যায়, তবে এটি পুরো মেলে এমন স্ট্রিং এবং তাদের অবস্থান ফেরত দেয়।
pattern = r"World"
str = "Hello, World!"
result = match(pattern, str)
println(result.match) # আউটপুট: Worldএখানে, match() ফাংশনটি "World" প্যাটার্নের সাথে মেলে এমন অংশটি ফেরত দিচ্ছে, অর্থাৎ "World"।
২. String Replacement with Regular Expressions
replace() ফাংশন
replace() ফাংশনটি স্ট্রিংয়ের মধ্যে RegEx প্যাটার্নের সাথে মেলানো অংশগুলি প্রতিস্থাপন করতে ব্যবহৃত হয়। এটি একটি নতুন স্ট্রিং ফেরত দেয়।
str = "I have 2 apples"
pattern = r"\d+" # ডিগিটের সাথে মেলানো প্যাটার্ন
replacement = "many"
new_str = replace(str, pattern => replacement)
println(new_str) # আউটপুট: I have many applesএখানে, \d+ প্যাটার্নটি ডিগিটের সাথে মেলে এবং replace() ফাংশনটি সেই ডিগিটের জায়গায় "many" রাখে।
৩. String Splitting with Regular Expressions
split() ফাংশন
split() ফাংশনটি একটি স্ট্রিংকে নির্দিষ্ট RegEx প্যাটার্নের ভিত্তিতে বিভক্ত (split) করতে ব্যবহৃত হয়।
str = "apple,banana,orange"
pattern = r","
result = split(str, pattern)
println(result) # আউটপুট: ["apple", "banana", "orange"]এখানে, split() ফাংশনটি কমা , চিহ্নের ভিত্তিতে স্ট্রিংটিকে পৃথক করে একটি অ্যারে প্রদান করে।
৪. Case Insensitive Matching
RegEx প্যাটার্নে case-insensitive matching করতে i ফ্ল্যাগ ব্যবহার করা যেতে পারে।
pattern = r"hello"i # 'hello' এর প্রতি ক্ষেত্রে মেলাবে
str = "Hello, World!"
println(ismatch(pattern, str)) # আউটপুট: trueএখানে, i ফ্ল্যাগটি প্যাটার্নটিকে case-insensitive করে তোলে, যার ফলে "Hello" এবং "hello" এর মধ্যে পার্থক্য করা হয় না।
সারসংক্ষেপ
- Regular Expressions (RegEx) জুলিয়া ভাষায় স্ট্রিং ম্যানিপুলেশন এবং মেলানোর জন্য একটি শক্তিশালী টুল।
ismatch()ফাংশন স্ট্রিংয়ের সাথে প্যাটার্ন মেলানো চেক করতে ব্যবহৃত হয়।match()ফাংশন প্যাটার্নের সাথে মেলানো অংশ এবং তাদের অবস্থান ফেরত দেয়।replace()ফাংশন স্ট্রিংয়ের মধ্যে প্যাটার্ন মেলে এমন অংশগুলি প্রতিস্থাপন করতে ব্যবহৃত হয়।split()ফাংশন একটি স্ট্রিংকে RegEx প্যাটার্নের ভিত্তিতে বিভক্ত করতে ব্যবহৃত হয়।iফ্ল্যাগ case-insensitive matching জন্য ব্যবহার করা হয়।
RegEx জুলিয়া ভাষায় স্ট্রিং ম্যানিপুলেশন এবং অনুসন্ধান করার জন্য একটি অত্যন্ত শক্তিশালী টুল, যা কোডের নমনীয়তা এবং কার্যকারিতা বাড়ায়।
Read more