রেগুলার এক্সপ্রেশন (উদাহরণ সহ) - ১

"এবং এখন আমি আপনাকে রেগুলার এক্সপ্রেশন সম্পর্কে বলব। এই বিষয়টি একই সময়ে জটিল এবং সহজ। রেগুলার এক্সপ্রেশনগুলি পুঙ্খানুপুঙ্খভাবে বোঝার জন্য, আপনাকে দুটি বা তিনটি মোটা বই পড়তে হতে পারে, কিন্তু আমি আপনাকে শিখিয়ে দিতে পারি কিভাবে সেগুলি ব্যবহার করতে হয় এই মুহূর্তে।"

"অভিজ্ঞ প্রোগ্রামাররা যেমন রসিকতা করতে পছন্দ করে, যদি আপনার কোন সমস্যা থাকে এবং মনে করেন যে আপনি নিয়মিত অভিব্যক্তি দিয়ে এটি সমাধান করতে যাচ্ছেন, এখন আপনার দুটি সমস্যা আছে।"

"হুম।"

"আমি আশা করি আমি তোমাকে খুব বেশি ভয় পাইনি, আমার বন্ধু। না?"

"ঠিক আছে, ভাল। তাই, আমাদের নতুন বিষয় হল রেগুলার এক্সপ্রেশন।"

"যদি আমরা তাদের অতি সরলীকরণ করি, নিয়মিত অভিব্যক্তিগুলি স্ট্রিংয়ের জন্য নিদর্শন।"

"আপনি একটি স্ট্রিং একটি প্রদত্ত প্যাটার্নের সাথে মেলে কিনা তা পরীক্ষা করতে পারেন। আপনি একটি সীমানা বা প্যাটার্ন ব্যবহার করে একটি স্ট্রিংকে অংশে বিভক্ত করতে পারেন।"

"কিন্তু আসুন কিছু সহজ দিয়ে শুরু করি: একটি প্যাটার্ন কি? "

"এসকিউএল-এ (কিন্তু জাভাতে নয়), আপনি একটি স্ট্রিং একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে কিনা তা পরীক্ষা করতে পারেন। এটি দেখতে এইরকম:"

name like 'Alex%'

এখানে নাম হল একটি পরিবর্তনশীল, যেমন একটি প্যাটার্ন চেক করার জন্য একটি কমান্ড এবং "Alex%" হল প্যাটার্ন।

এই ক্ষেত্রে, % মানে কোনো স্ট্রিং বা সাবস্ট্রিং।

প্যাটার্ন প্যাটার্নের সাথে মিলে যাওয়া স্ট্রিং
'অ্যালেক্স%' অ্যালেক্স
অ্যালেক্স এবং
অ্যালেক্স অ্যালেক্স অ্যালেক্স
অ্যালেক্স আন্দ্রা
….
'%এক্স%' মা এক্স
মা এক্স ইম
আলে এক্স অ্যান্ড্র
'% a' ওলগ
হেলেন
আইআর

"এসকিউএল-এ, যদি আপনি নির্দিষ্ট করতে চান যে শুধুমাত্র একটি অন্য অক্ষর থাকা উচিত, তাহলে আপনি আন্ডারস্কোর অক্ষর ব্যবহার করবেন: "_"।"

প্যাটার্ন প্যাটার্নের সাথে মিলে যাওয়া স্ট্রিং
'আলেক্স%_' অ্যালেক্স
অ্যালেক্স এবং
অ্যালেক্স অ্যালেক্স অ্যালেক্স
অ্যালেক্স আন্দ্রা
….
'_এক্স' Ax
Bx
Cx
'___' আআআআব বিবি …
_

"এটা বোধগম্য."

"ঠিক আছে, তাহলে রেগুলার এক্সপ্রেশনে যাওয়া যাক।"

"নিয়মিত অভিব্যক্তিতে সাধারণত অক্ষরের সংখ্যার উপর সীমাবদ্ধতা থাকে না, তবে তাদের 'বিষয়বস্তু'ও থাকে৷ "যেকোনো মুখোশ সাধারণত দুটি (কখনও কখনও আরও) অংশ নিয়ে থাকে: প্রথমটি অক্ষরের 'পছন্দ' বর্ণনা করে এবং দ্বিতীয়টি অক্ষরের সংখ্যা বর্ণনা করে "

"এখানে কিছু বিষয়বস্তুর উদাহরণ রয়েছে:"

প্যাটার্ন বর্ণনা উদাহরণ
. যে কোনো একটি চরিত্র 1
\d যেকোনো অঙ্ক 7
\D যেকোনো অ-সংখ্যা
\s একটি স্থান, লাইন বিরতি, বা ট্যাব অক্ষর '
\S স্পেস, ট্যাব এবং লাইন ব্রেক ছাড়া অন্য কিছু
[az] a থেকে z পর্যন্ত যেকোনো অক্ষর z
[০-৯] 0 থেকে 9 পর্যন্ত যেকোনো অঙ্ক। 8
\w যেকোনো শব্দের চরিত্র
\W যেকোন অ-শব্দ অক্ষর _

"আমি সেগুলি ঠিক মনে রাখব না, তবে এটি খুব কঠিন দেখাচ্ছে না।"

"চমৎকার, তাহলে এখানে একটি মুখোশের অক্ষরের সংখ্যার উদাহরণ রয়েছে: "

প্যাটার্ন বর্ণনা উদাহরণ
ক? 'ক' অক্ষরটি একবারই হয় বা না হয়
বি+ 'B' অক্ষরটি এক বা একাধিকবার হয় বিবিবিবি
গ* 'C' অক্ষরটি শূন্য বা তার বেশি বার হয় সিসিসি
D{n} 'D' অক্ষরটি n বার হয় প্যাটার্ন D{4} DDDD এর সাথে মেলে
ই{এন,} 'E' অক্ষরটি n বা তার বেশি বার হয় প্যাটার্ন E{2,} EEEEEEE এর সাথে মেলে
F{n,m} 'F' অক্ষরটি n এবং m সময়ের মধ্যে ঘটে প্যাটার্ন E{2,4} EEEE এর সাথে মেলে

"এটা সব বেশ সোজা বলে মনে হচ্ছে।"

"আপনি এত তাড়াতাড়ি সবকিছু ধরছেন। এখন দেখা যাক সবকিছু একসাথে কেমন লাগে:"

প্যাটার্ন বর্ণনা উদাহরণ
[বিজ্ঞাপন]? 'a' এবং 'd'-এর মধ্যে একটি অক্ষর একবার বা একেবারেই ঘটে না এ বি সি ডি
[বিডি, জেড]+ 'b', 'c', 'd', বা 'z' এক বা একাধিকবার হয় b, bcdcdbdbdbdbzzzzbbzbzb, zbz
[১,৭-৯]* সংখ্যা 1, 7, 8, বা 9 শূন্য বা তার বেশি বার ঘটে 1, 7, 9, 9777, 111199
1{5} 1 সংখ্যাটি 5 বার আসে 11111
[১,২,ক,খ]{2} প্রতীক 1, 2, 'a', বা 'b' দুইবার হয় 11, 12, 1a, ab, 2b, bb, 22
[a,0]{2,3} 'a' বা 0 চিহ্ন 2 বা 3 বার হয় aa, a0,00,0a, aaa,000, a00,0a0, a0a

"এখনও সব পরিষ্কার।"

"সত্যিই? হুম। হয় আমি সবকিছু খুব ভালোভাবে বুঝিয়ে দিয়েছি, নয়তো আপনি খুব দ্রুত তাড়াহুড়ো করছেন। ওয়েল, যেভাবেই হোক, সেটা আমাদের জন্য ভালো।"

"এখানে আপনার জন্য কয়েকটি নতুন অন্তর্দৃষ্টি রয়েছে।"

"যেহেতু নিয়মিত এক্সপ্রেশনগুলি প্রায়শই সাবস্ট্রিংগুলি খুঁজে পেতে ব্যবহৃত হয়, তাই আমরা আমাদের প্যাটার্নগুলিতে আরও দুটি অক্ষর (^ এবং $) যোগ করতে পারি।"

"^ এর মানে হল যে সাবস্ট্রিংটি অবশ্যই স্ট্রিংয়ের শুরুতে অন্তর্ভুক্ত করবে।"

"$ মানে হল সাবস্ট্রিং স্ট্রিং এর শেষ অন্তর্ভুক্ত করা আবশ্যক।"

"এখানে কিছু উদাহরণঃ:"

প্যাটার্ন স্ট্রিং এবং সাবস্ট্রিং যা প্যাটার্নের সাথে মেলে
একটি{3} আআআআআআআআআআআ  _  _  _  _
একটি{3}$ আআআআআআআআআআআ  _
^a{3} আআআআআআআআআআআ  _
^a{3}$ আআআআআআআআআআআ

"এবং আরও একটি গুরুত্বপূর্ণ পয়েন্ট।"

"রেগুলার এক্সপ্রেশনে, নিম্নলিখিত অক্ষরগুলির বিশেষ অর্থ রয়েছে: [ ] \ / ^ $ . | ? * + ( ) { }। তাদের বলা হয় নিয়ন্ত্রণ অক্ষর। সুতরাং, আপনি কেবল স্ট্রিংগুলিতে তাদের ব্যবহার করতে পারবেন না।"

"জাভা কোডের মতো, সেগুলিকে অবশ্যই পালাতে হবে৷ "এবং আবার জাভা কোডের মতো, এর জন্য '\' অক্ষরটি ব্যবহার করা হয়।"

"যদি আমরা তিনটি '?' সমন্বিত একটি স্ট্রিং বর্ণনা করতে চাই?' অক্ষর, আমরা '?{3}' লিখতে পারি না, কারণ '?' একটি নিয়ন্ত্রণ অক্ষর। আমাদের এটি এভাবে করতে হবে: \?{3}। আমরা যদি '\' অক্ষর ব্যবহার করতে চাই, তাহলে আমাদের '\\' লিখতে হবে।"

"ঠিক আছে বুঝেছি."

"এবং এখন এখানে আরেকটি আকর্ষণীয় টিডবিট রয়েছে। জাভা কোড সহ ফাইলগুলিতে, '\' অক্ষরটিও স্ট্রিংগুলিতে এস্কেপ করা উচিত, যেহেতু এটি একটি নিয়ন্ত্রণ অক্ষর।"

"অবশ্যই."

"সুতরাং, আপনি যদি একটি স্ট্রিংয়ে একটি জাভা রেগুলার এক্সপ্রেশন সংজ্ঞায়িত করার চেষ্টা করছেন, তাহলে আপনাকে '\' অক্ষরটি দুবার এড়িয়ে যেতে হবে।"

"এখানে একটি উদাহরণ:"

আমি একটি মুখোশ চাই যা 'c:\anything'-এর সাথে মেলে
তাত্ত্বিকভাবে, রেগুলার এক্সপ্রেশনটি এইরকম হওয়া উচিত:
একটি 'c' অক্ষর,
কোলন,
ব্যাকস্ল্যাশ,
পিরিয়ড এবং তারকাচিহ্ন (যেকোন সংখ্যক অক্ষর বোঝাতে)। আমি পঠনযোগ্যতা উন্নত করতে স্পেস যোগ করেছি:
c : \ .*
কিন্তু অক্ষর '\' এবং '।' পালাতে হবে, তাই রেগুলার এক্সপ্রেশনটি এরকম দেখাবে:
c :   \\ \। *
অথবা, শূন্যস্থান ছাড়া
c: \\ \. *
"আমাদের রেগুলার এক্সপ্রেশনে তিনটি ব্যাকস্ল্যাশ থাকা উচিত।
এর মানে হল একটি জাভা ফাইলে রেগুলার এক্সপ্রেশনটি এরকম দেখাবে:"
স্ট্রিং regexp="c: \\\\ \\. *";

"বাহ! বাহ। এখন আমি জানি।"

"এবং আপনি যদি এটির গভীরে খনন করার সিদ্ধান্ত নেন তবে এখানে কয়েকটি ভাল লিঙ্ক রয়েছে:"

উইকিপিডিয়ায় পাঠ