কম্পিউটার টিউটোরিয়াল

রুবিতে নিয়মিত অভিব্যক্তি আয়ত্ত করা:একটি ব্যবহারিক গাইড

আপনি RegEx এর কথা শুনে থাকতে পারেন, যা রেগুলার এক্সপ্রেশনের জন্য ছোট। এটি ভীতিপ্রদর্শন হিসাবে চলে আসতে পারে, তবে আপনি প্যাটার্নগুলির অর্থ কী এবং কীভাবে একটি বাস্তব অভিব্যক্তি তৈরি করতে এবং এটি ব্যবহার করতে অভ্যস্ত হয়ে গেলে এটি খুব খারাপ নয়। একবার আপনি স্ট্রিং এবং পাঠ্য সম্পর্কে আরও বিমূর্ত উপায়ে চিন্তা করতে অভ্যস্ত হয়ে গেলে, এটি সমস্যা সমাধানের জন্য একটি দরকারী টুল হতে পারে যেখানে আপনি ডেটার সেটে সাধারণ নিদর্শনগুলি খুঁজছেন। 

RegEx হল প্যাটার্ন মেলার একটি পদ্ধতি:প্যাটার্নের উপর ভিত্তি করে স্ট্রিং বা টেক্সট ফিল্টার করার একটি উপায়, সাধারণত কাঙ্খিত টেক্সট এক্সট্র্যাক্ট এবং পরিবর্তন করার জন্য। এই প্রবন্ধে, আমরা আলোচনা করব কিভাবে রেগুলার এক্সপ্রেশন ব্যবহার করতে হয় এবং কিভাবে রুবি পদ্ধতি ব্যবহার করে সেই এক্সপ্রেশনগুলিকে আপনার প্রোজেক্টের জন্য আপনার যুক্তিতে অন্তর্ভুক্ত করার জন্য পরীক্ষা করা যায়।

RegEx কে ভিজ্যুয়ালাইজ করার এবং বোঝার ক্ষেত্রে অত্যন্ত সহায়ক একটি টুল হল রুবুলার নামক একটি সাইট। ইতিমধ্যে পপুলেট করা পাঠ্যের ব্লক ব্যবহার করে RegEx পরীক্ষা করতে এখানে লিঙ্কটিতে ক্লিক করুন। আপনি লক্ষ্য করবেন যে দুটি ফরোয়ার্ড স্ল্যাশের মধ্যে একটি স্ট্রিং রয়েছে যার মধ্যে 'প্রতিবেশী' শব্দ রয়েছে। 

বিশ্বাস করুন বা না করুন, এটি একটি নিয়মিত অভিব্যক্তি! সম্পূর্ণ শব্দ, বাক্য, অনুচ্ছেদকে এমনকি টেকনিক্যালি রেগুলার এক্সপ্রেশন বলা যেতে পারে (যতক্ষণ তারা দুটি ফরোয়ার্ড স্ল্যাশের মধ্যে থাকে)। রুবুলার এনভায়রনমেন্ট আমাদের জন্য আমাদের পাঠ্যের ব্লকে 'প্রতিবেশী' প্যাটার্নের প্রতিটি একক দৃষ্টান্ত হাইলাইট করে – এমনকি এমন উদাহরণ যেখানে প্রতিবেশী একটি বড় শব্দের অংশও! যে বলা হচ্ছে, আপনি একটি সঠিক শব্দ মিলের চেয়ে আরও বিমূর্ত কিছু খুঁজে পেতে চাইতে পারেন। এখানেই মেটাক্যারেক্টার আসে।

মেটাচ্যারেক্টার

রুবিতে নিয়মিত অভিব্যক্তি আয়ত্ত করা:একটি ব্যবহারিক গাইড RegEx ব্যবহার করা অভিজ্ঞ প্রোগ্রামারদের জন্য চ্যালেঞ্জিং হতে পারে, তাই নিরুৎসাহিত হবেন না।

ঠিক যেমন পরমাণুগুলি আমাদের চারপাশে যা কিছু দেখি তার বিল্ডিং ব্লক, মেটাক্যারেক্টারগুলি হল নিয়মিত এক্সপ্রেশনের বিল্ডিং ব্লক। আপনি আপনার নিয়মিত অভিব্যক্তি যোগ করার সাথে সাথে সামগ্রিক প্যাটার্ন পরিবর্তন হয়। এবং যখন সামগ্রিক প্যাটার্ন পরিবর্তন হয়, তখন আপনি যে পদ্ধতিগুলি ব্যবহার করেন তা থেকে আপনি যে ফলাফলগুলি ফিরে পান তা ভিন্ন হতে পারে। 

আপনার নিয়মিত অভিব্যক্তি পরিবর্তন করার বিভিন্ন উপায় নীচে তালিকাভুক্ত করা হয়েছে যাতে আপনি একটি প্যাটার্ন খুঁজে পেতে পারেন যা আপনার জন্য কাজ করে। একেবারে সঠিক কেউ নেই৷ ফোন নম্বর বা ইমেল ইত্যাদির জন্য একটি রেগুলার এক্সপ্রেশন লেখার উপায় - এটি আপনার প্রকল্পের জন্য আপনার প্রয়োজনীয়তা সম্পর্কে। 

MetacharacterMatchesExample[abc]একটি অক্ষর শ্রেণী যা স্ট্রিং-এর একটি একক অক্ষরের সাথে মেলে যা a, b বা c হতে পারে
/[eig]/ প্রতিবেশী, আপেল বা গেটের কিছু অংশের সাথে মেলাতে পারে a, b বা c/[^eig]/ প্রতিবেশী, আপেল বা গেটের অংশগুলির সাথে মিলতে পারে [a-z] একটি অক্ষর শ্রেণী যা a-z/[e-i] রেঞ্জের যেকোন একক অক্ষরের সাথে মেলে/ প্রতিবেশী, আপেল বা গেটের অংশে একক অক্ষরের সাথে মেলে
[a-zA-Z] একটি অক্ষর শ্রেণী যা a-z বা A-Z থেকে অক্ষরের একটি পরিসরের সাথে মেলে
/[e-i]/ “হাই প্রতিবেশী!”, গ্র্যাপল, বা গেট^ লাইনের শুরু/^হ্যালো/ লাইনের সাথে মেলে যা ‘হ্যালো’$ লাইনের শেষ/গুডবাই$/ লাইনের সাথে মেলে যা ‘গুডবাই’\আস্টার্ট অফ স্ট্রিং-এ শেষ হয়। '^'-এর মতো, কিন্তু কোনো মাল্টিলাইন মোড ছাড়া/\Aa/ আপেলের 'a'-এর সাথে মেলে, কিন্তু এপ্রিকট-এর 'a'-এর সাথে মেলে না কারণ এটি স্ট্রিংয়ের শুরু নয়:
আপেল
এপ্রিকট\z স্ট্রিং এর শেষ। '$'-এর অনুরূপ, কিন্তু কোনো মাল্টিলাইন মোড ছাড়া/\za/ জেব্রার 'a'-এর সাথে মেলে না, কিন্তু লাইব্রায় 'a' নয় কারণ এটি স্ট্রিংয়ের শেষ নয়
librazebra.ওয়াইল্ড কার্ড. ডট যে কোনো অক্ষরের সাথে মেলে। /./ অ্যাপলের যেকোন একক অক্ষরের সাথে মিলবে+এক বা একাধিক পূর্ববর্তী মেটাক্যারেক্টারের সাথে মেলে/aa+/ 'aa', 'aaaaaa'-এর সাথে মিলবে কিন্তু 'a'-এর সাথে মিলবে না কারণ এটিকে পূর্ববর্তী মেটাক্যারেক্টারের এক বা একাধিক হতে হবে (যেটি এই উদাহরণে দ্বিতীয় a)* শূন্য বা তার বেশি পূর্ববর্তী মেটাচ্যারেক্টারের সাথে মিলবে', 'will'/'/' 'abbbbbb'\sযেকোন হোয়াইটস্পেস অক্ষর/^The\s.+s$/ মিলবে The Beatles , দ্য রোলিং স্টোনস, ক্র্যানবেরি, ইত্যাদি। \SAny নন-হোয়াইটস্পেস অক্ষর/\S+/ মিলবে দ্য বিটলস , দ্য রোলিং স্টোনস, ক্র্যানবেরি, ইত্যাদি। \dযেকোন সংখ্যা/\d+/ 22, 33333, 0, ইত্যাদির সাথে মিলবে\DAny অ-সংখ্যা/\D+/ মিলবে 'হ্যালো, গুডবাই'\wযেকোন শব্দের অক্ষর/ny\w*/ মিলবে 'ny_152', 'nypost39', etc\WAny অ-শব্দ অক্ষর/\W+&^-এর সাথে মিলবে %'{3}'(Act) 'a'/\d{3}-\d{3}-\d{4}/ মিলবে 555-555-5555a{3,}তিনটি বা তার বেশি 'a'/[a-zA-Z0-9!#$^&*)(]{8,}/ এর সাথে মিলবে 'xE*BqRx14B7TAQp' এর মতো দেখতে যা একটি পাসওয়ার্ড ব্যবহার করা হতে পারে ⇐ 6}'a'/[a-zA-Z0-9!#$^&*)(]{8,32}/ এর মধ্যে তিন থেকে ছয়টি '0XX!pC3Odpu30Qc'-এর সাথে মিলবে কারণ এটি 3-এর বেশি এবং 32টিরও কম অক্ষর?0 বা 'a'/\d-এর 1?-\d{3}/-{3}/\d নম্বর আন্তর্জাতিক ফোন নম্বরের সাথে সংযুক্ত করা হবে -\d{3}/\d)-{3}/\d সামনে এবং একটি আন্তর্জাতিক কোড ছাড়া সামনে সংযুক্ত। 

ব্যবহারকারীদের ওয়েবসাইটগুলিতে ফর্ম পূরণ করার ক্ষেত্রে মেটাক্যারেক্টার ব্যবহার করা বৈধতার জন্য দুর্দান্ত। আমরা নিশ্চিত করতে চাই যে সঠিক তথ্য প্রবেশ করানো হয়েছে – এটি একটি ঠিকানার প্যাটার্ন বা একটি ইমেল বা ফোন নম্বর সঠিক ফর্ম্যাট কিনা তা নিশ্চিত করতে RegEx এর একটি দুর্দান্ত ব্যবহার হবে৷ এটি নতুন অ্যাকাউন্ট নিবন্ধন করার সময় কম ব্যবহারকারীর ত্রুটি সহ আরও ভাল সংগঠিত ডাটাবেসের দিকে নিয়ে যায়। 

রুবিতে RegEx পরীক্ষা করার পদ্ধতি

স্ক্যান এবং ম্যাচের মধ্যে পার্থক্য করতে আমরা যে কোডটি ব্যবহার করতে যাচ্ছি তা এখানে:

#!/usr/bin/ruby
 
class RegexTest
 def initialize(str, regex)
 @str = str
 @regex = regex
 @result = str.scan(regex)
 end
 def display_details()
 puts "String = #@str"
 puts "regex = #@regex"
 puts "result = #@result"
 end
end
# Create Objects
str1 = RegexTest.new("The rain in Spain stays mainly on the plain", /\w+ain/)
str2 = RegexTest.new("In Hertford, Hereford, and Hampshire, hurricanes hardly ever happen", /H\w+/)
# Call Methods
str1.display_details()
str2.display_details()

স্ক্যান করুন

রুবিতে স্ক্যান পদ্ধতিটি আপনার নিয়মিত অভিব্যক্তির সাথে মেলে এমন সমস্ত স্ট্রিংগুলির একটি অ্যারে প্রদান করে:

str1: result = ["rain", "Spain", "main", "plain"]

str2: result = ["Hertford", "Hereford", "Hampshire"]

এটি আপনাকে ফলাফলের সাথে যা খুশি তা করতে দেয়।

RegExp ম্যাচ

রেগুলার এক্সপ্রেশন ম্যাচ পদ্ধতিটি খুব, খুব স্ক্যানের অনুরূপ, কিন্তু সমস্ত মিলের পরিবর্তে একটি ম্যাচের প্রথম দৃষ্টান্ত খুঁজে পায়। পার্থক্যটি দেখতে @result =str.scan(regex) কে @result =str.match(regex) এ পরিবর্তন করুন: 

str1:result = rain

str2:result = Hertford

ম্যাচ, যাইহোক, একটি বস্তু প্রদান করে। এটির সাথে যুক্ত কিছু পদ্ধতি রয়েছে যা আপনি যখন আপনার ফলাফলগুলি ব্যবহার করেন তখন আপনার যুক্তিতে ব্যবহার করা যেতে পারে। আপনি সেখানে কী ব্যবহার করতে পারেন সে সম্পর্কে আরও তথ্যের জন্য রুবি ডক্স দেখুন। 

গ্রেপ

গ্রেপ অ্যারেতে মিলে যাওয়া স্ট্রিং খুঁজে পাওয়ার জন্য একটি গণনাযোগ্য পদ্ধতি। এটি আপনার রেগুলার এক্সপ্রেশনের সাথে মেলে এমন সমস্ত স্ট্রিংগুলির একটি অ্যারে ফিরিয়ে দেবে। আমাদের কাছে থাকা কোডের সাহায্যে আমাদের নিশ্চিত করতে হবে যে আমরা যে স্ট্রিংটি দিয়েছি তা একটি অ্যারেতে বিভক্ত হয়েছে। 

এটি করতে কোডের এই লাইনটি পরিবর্তন করুন:

@result = str.match(regex)

এবং এটিতে পরিবর্তন করুন:

@result = str.split(/\s|,/).grep(regex);

রুবিতে নিয়মিত অভিব্যক্তি আয়ত্ত করা:একটি ব্যবহারিক গাইড

"ক্যারিয়ার কর্ম আমার জীবনে প্রবেশ করেছিল যখন আমার এটির সবচেয়ে বেশি প্রয়োজন ছিল এবং দ্রুত আমাকে একটি বুটক্যাম্পের সাথে মেলাতে সাহায্য করেছিল৷ স্নাতক হওয়ার দুই মাস পরে, আমি আমার স্বপ্নের চাকরি পেয়েছি যা আমার মূল্যবোধ এবং জীবনের লক্ষ্যগুলির সাথে সামঞ্জস্যপূর্ণ!"

ভেনাস, রকবটের সফটওয়্যার ইঞ্জিনিয়ার

আপনার বুটক্যাম্প ম্যাচ

খুঁজুন

তারপরে আপনি প্রথম ফলাফলের মতো একটি ফলাফল পাবেন: 

str1: result = ["rain", "Spain", "main", "plain"]

str2: result = ["Hertford", "Hereford", "Hampshire"]

Str =~ RegEx

=~ ব্যবহার করে বেসিক ম্যাচিং অপারেটর, আমরা স্ট্রিংটিকে রেগুলার এক্সপ্রেশনের সাথে তুলনা করতে পারি এবং একটি ম্যাচের প্রথম সূচকটি ফেরত দিতে পারি। কোন মিল না থাকলে এটি শূন্যে ফিরে আসবে। 

উপসংহার

এই নিবন্ধে, আমরা আলোচনা করেছি কিভাবে রুবিতে রেগুলার এক্সপ্রেশন (RegEx) ব্যবহার করতে হয়। আপনি রুবি দিয়ে কী তৈরি করতে পারেন সে সম্পর্কে আরও জানতে চাইলে, আমাদের নিবন্ধটি দেখুন, ”রুবি কোড কিসের জন্য ব্যবহৃত হয়? "

রুবি শেখার একটি ভাল উপায় চান? কর্মজীবন কর্মকে আপনার জন্য সেরা প্রশিক্ষণ প্রোগ্রাম খুঁজে পেতে সাহায্য করুন।


  1. ম্যাটপ্লটলিব ব্যবহার করে অক্ষ লেবেল এবং কিংবদন্তিতে সাবস্ক্রিপ্টে পাঠ্য কীভাবে লিখবেন?

  2. অ্যান্ড্রয়েড টেক্সটভিউতে কীভাবে বিভক্ত () ব্যবহার করবেন?

  3. Matplotlib ব্যবহার করে iPython নোটবুক থেকে ফাইল হিসাবে চিত্র সংরক্ষণ করুন

  4. পাইথন অন্যান্য ভাষার তুলনায় ধীর কেন?