টিসিএল (Tcl) - Pattern Matching এবং Regular Expressions
টিসিএল (Tcl) এ Pattern Matching এবং Regular Expressions (RegEx) ব্যবহার করে স্ট্রিংয়ের মধ্যে নির্দিষ্ট প্যাটার্ন অনুসন্ধান এবং ম্যাচিং করা যায়। এগুলি টেক্সট প্রক্রিয়াকরণের জন্য অত্যন্ত শক্তিশালী টুলস, যা আপনাকে টেক্সটের মধ্যে প্যাটার্ন খুঁজে বের করার জন্য খুবই সহায়ক হতে পারে।
১. Pattern Matching in Tcl
টিসিএল-এ Pattern Matching সাধারণত গ্লোবাল স্টাইলের প্যাটার্ন ম্যাচিং ব্যবহার করে করা হয়। গ্লোবাল স্টাইল প্যাটার্নে সাধারণত *, ?, এবং [] ব্যবহার করা হয়। টিসিএল স্ট্রিং মিলানোর জন্য string match এবং regexp কমান্ড ব্যবহার করতে পারে।
১.১. string match প্যাটার্ন ম্যাচিং
string match পদ্ধতিতে স্ট্রিংয়ের মধ্যে গ্লোব প্যাটার্ন (wildcards) ব্যবহার করা হয়। এই পদ্ধতিতে স্ট্রিংয়ে কোনো নির্দিষ্ট প্যাটার্ন মিলে কিনা পরীক্ষা করা হয়।
সাধারণ সিনট্যাক্স:
string match pattern stringpattern: প্যাটার্ন যা ম্যাচ করতে হবে।string: সেই স্ট্রিং যার সাথে প্যাটার্ন মিলানো হবে।
উদাহরণ:
set str "hello world"
if { [string match "hello*" $str] } {
puts "Pattern matched!"
}এখানে, "hello*" প্যাটার্নটি "hello" দিয়ে শুরু হওয়া যে কোনো স্ট্রিং এর সাথে মিলবে। যদি মিল মেলে, তবে "Pattern matched!" আউটপুট হবে।
১.২. Pattern Matching Operators
*: শূন্য বা একাধিক অক্ষর।?: একক অক্ষর।[]: একটি অক্ষরের রেঞ্জ (যেমন[a-z]অথবা[0-9])।
উদাহরণ:
set str "test123"
if { [string match "test???" $str] } {
puts "Pattern matched!"
}এখানে, "test???" প্যাটার্নটি "test" এর পরে ৩টি যে কোনো অক্ষরের সাথে মিলবে।
২. Regular Expressions (RegEx)
টিসিএল-এ Regular Expressions (RegEx) আরও শক্তিশালী এবং লচিলভাবে স্ট্রিং প্যাটার্ন চেক করার জন্য ব্যবহৃত হয়। টিসিএল এর regexp কমান্ড ব্যবহার করে আপনি একটি স্ট্রিংয়ের মধ্যে যে কোনো প্যাটার্ন ম্যাচ করতে পারেন।
২.১. regexp কমান্ড
সাধারণ সিনট্যাক্স:
regexp ?options? pattern string ?matchVar?pattern: যে প্যাটার্নটির জন্য মিল খোঁজা হবে।string: যেখানে প্যাটার্ন মিলাতে হবে।matchVar: মিল পাওয়া অংশটি যেখানে সঞ্চিত হবে।options: অপশনস যেমন-inline,-allইত্যাদি।
উদাহরণ:
set str "The price is 100 dollars."
if { [regexp {(\d+)} $str match] } {
puts "Match found: $match"
}এখানে, {(\d+)} একটি রেগুলার এক্সপ্রেশন যা স্ট্রিংয়ের মধ্যে যেকোনো সংখ্যাকে খুঁজে বের করে। এর ফলস্বরূপ, match ভেরিয়েবলে 100 সঞ্চিত হবে, এবং "Match found: 100" আউটপুট হবে।
২.২. RegEx Matching Options
-all: সমস্ত মিল খুঁজে বের করে (যেমন একাধিক প্যাটার্নে ম্যাচ)।-inline: প্রথম মিল পাওয়ার পরেই প্যাটার্নটি ফিরিয়ে দেয়, পুরো স্ট্রিং না দেখে।-nocase: প্যাটার্নের তুলনা বড়-ছোট অক্ষর ভেদে না করে।
উদাহরণ (all option):
set str "apple orange apple banana"
regexp -all {apple} $str match
puts $match ;# আউটপুট: apple appleএখানে, -all অপশনটি ব্যবহার করা হয়েছে যাতে apple প্যাটার্নটি স্ট্রিংয়ের সব মিলের সাথে ম্যাচ হয়।
২.৩. RegEx Groups
রেগুলার এক্সপ্রেশন গ্রুপের মাধ্যমে আপনি প্যাটার্নের বিভিন্ন অংশ আলাদা করে বের করতে পারেন।
উদাহরণ:
set str "The date is 2024-11-12."
regexp {(\d{4})-(\d{2})-(\d{2})} $str match year month day
puts "Year: $year, Month: $month, Day: $day"এখানে, {(\d{4})-(\d{2})-(\d{2})} রেগুলার এক্সপ্রেশনটি একটি তারিখের ফরম্যাট ম্যাচ করে এবং ৩টি অংশ আলাদা করে: বছর, মাস এবং দিন। আউটপুট হবে:
Year: 2024, Month: 11, Day: 12৩. RegEx Special Characters
রেগুলার এক্সপ্রেশন ব্যবহার করার সময় কিছু বিশেষ চরিত্র রয়েছে যেগুলি প্যাটার্নের সাথে মিলের জন্য ব্যবহৃত হয়। নিচে কিছু সাধারণ বিশেষ চরিত্র দেওয়া হলো:
.: যে কোনো একক অক্ষর (নিউলাইন ছাড়া)।\d: যে কোনো ডিজিট (০-৯)।\w: যে কোনো অক্ষর বা সংখ্যা (a-z, A-Z, 0-9)।\s: সাদা স্থান (স্পেস, ট্যাব ইত্যাদি)।+: পূর্ববর্তী অংশটি এক বা একাধিকবার উপস্থিত হতে পারে।*: পূর্ববর্তী অংশটি শূন্য বা একাধিকবার উপস্থিত হতে পারে।?: পূর্ববর্তী অংশটি শূন্য বা একবার উপস্থিত হতে পারে।
উদাহরণ (Special Characters):
set str "abc 123 xyz"
if { [regexp {\d+} $str] } {
puts "Numbers found in the string."
}এখানে, \d+ ব্যবহার করা হয়েছে যাতে যে কোনো সংখ্যা স্ট্রিংয়ে খুঁজে বের করা যায়।
উপসংহার
টিসিএল-এ Pattern Matching এবং Regular Expressions ব্যবহারের মাধ্যমে আপনি স্ট্রিংয়ের মধ্যে নির্দিষ্ট প্যাটার্ন অনুসন্ধান এবং টেক্সট ম্যানিপুলেশন করতে পারেন। Pattern Matching টুলস যেমন string match এবং Regular Expressions টুলস যেমন regexp অত্যন্ত শক্তিশালী এবং নমনীয় স্ট্রিং ম্যানিপুলেশন করতে সহায়ক। এগুলি কোডের কার্যকারিতা ও নমনীয়তা বাড়াতে সাহায্য করে এবং আরও শক্তিশালী টেক্সট প্রসেসিং করতে সক্ষম করে।
Read more