বিষয়সূচী

01

কেন REGEXP — আগে গল্প

১৫ মিনিট

মূল সমস্যা: LIKE দিয়ে starts/ends/contains অনেক সময় যথেষ্ট — কিন্তু জটিল নিয়ম (৩ অক্ষর + ৩ সংখ্যা, A/B/C দিয়ে শুরু, ইত্যাদি) LIKE-এ কঠিন।

গল্প ১ — Email

rahim@gmail.com karim@yahoo.com user123@gmail.com abc@company.bd invalid-email
জিজ্ঞেস করো

শুধু LIKE দিয়ে কি সব ধরনের structure সহজে খুঁজবে?

গল্প ২ — Phone

01712345678 +8801712345678 017-12345678 ABC123

“যেগুলো mobile number-এর মতো দেখতে” — pattern rules লাগে।

গল্প ৩ — Employee ID

EMP + number চাই; HR1001, ABC বাদ।

গল্প ৪ — Product codes

SAM- দিয়ে শুরু + শেষে number।

Exact Search → = Simple Pattern → LIKE Complex Pattern → REGEXP
REGEXP ↓ Pattern Rules ↓ Find Matching Text
02

Regular Expression কী?

১৫ মিনিট

Regular + Expression = একটা rule/pattern যেটা বলে আমরা কেমন text খুঁজছি।

সিকিউরিটি গার্ডের নিয়ম: “ID EMP দিয়ে শুরু এবং পরে number থাকলে ঢুকতে দাও” — এই নিয়মটাই pattern।
Teacher Tip: আজকে সব regex শেখানোর দরকার নেই — শুধু কয়েকটা প্রতীক + কখন LIKE vs REGEXP।
03

LIKE vs REGEXP

১৫ মিনিট

LIKE

WHERE name LIKE 'Rah%'

Rah দিয়ে শুরু — সহজ।

জটিল চাহিদা

A বা B দিয়ে শুরু; অথবা ৩ letter + ৩ digit — REGEXP স্বাভাবিক।

FeatureLIKEREGEXP
Simple pattern
Starts / Ends / Contains
Character rulesLimitedPowerful
Multiple alternativesLimitedEasy (|)
Complex validationDifficultBetter
Regex symbols❌ (% _)
04

Basic REGEXP সিনট্যাক্স

১০ মিনিট
SELECT * FROM customers WHERE email REGEXP 'gmail';
SELECT → কী দেখতে চাই? FROM → কোন table? WHERE → ফিল্টার REGEXP → pattern matching 'gmail' → pattern (contains gmail)
MySQL-এ REGEXP / RLIKE একই ধরনের কাজ। ভার্সন/ইঞ্জিনভেদে কিছু পার্থক্য থাকতে পারে — ক্লাসে মূল ধারণাই যথেষ্ট।
05

Literal, ^ এবং $

২০ মিনিট

Contains — literal

WHERE name REGEXP 'Rah'

Start — ^

WHERE name REGEXP '^A'
^A → Starting position must be A Matches: Ahmed, Anika, Arif

End — $

WHERE name REGEXP 'n$'
n$ → Ending position must be n Matches: Rahman, Hasan, Hossain
Confusion: ^ = শুরু; $ = শেষ। উল্টো করো না।
06

Character classes [ ]

২০ মিনিট
PatternMeaning
[abc]a/b/c-এর যেকোনো একটি
[0-9]যেকোনো digit
[A-Z]uppercase letter
[a-z]lowercase letter
WHERE name REGEXP '^[ABC]' -- A বা B বা C দিয়ে শুরু WHERE employee_id REGEXP '[0-9]' -- ID-তে অন্তত একটা digit আছে
07

Repetition: * + ? {n} {n,m}

২০ মিনিট
  • * = zero or more
  • + = one or more
  • ? = zero or one
  • {n} = exactly n
  • {n,m} = n থেকে m
WHERE code REGEXP '^[A-Z]{3}[0-9]{3}$'
^ → Start [A-Z]{3} → Exactly 3 uppercase letters [0-9]{3} → Exactly 3 digits $ → End

Match

ABC123 XYZ456 EMP001

No match

AB123 ABCD123 ABC12 abc123
08

. Wildcard

১০ মিনিট

. ≈ যেকোনো একটি character (সাধারণ টেক্সটে)।

WHERE code REGEXP '^A.C$'
ABC AXC A7C
Newline/বিশেষ কেস গভীরে যাব না।
09

| OR Pattern

১০ মিনিট
WHERE city REGEXP 'Dhaka|Chittagong' WHERE name REGEXP 'Rahim|Karim'
Pattern1 OR Pattern2
10

বিজনেস প্যাটার্ন উদাহরণ

২০ মিনিট
  1. Names ^A → REGEXP '^A'
  2. Ends n → REGEXP 'n$'
  3. Contains Rah → REGEXP 'Rah'
  4. Starts A/B/C → REGEXP '^[ABC]'
  5. ID has digit → REGEXP '[0-9]'
  6. 3 letters + 3 digits → REGEXP '^[A-Z]{3}[0-9]{3}$'
  7. Dhaka|Chittagong → REGEXP 'Dhaka|Chittagong'
SELECT employee_name, employee_code FROM employees WHERE employee_code REGEXP '^[A-Z]{3}[0-9]{3}$';

ব্রেকডাউন: পুরো স্ট্রিং ঠিক ৩ বড় হাতের অক্ষর + ৩ সংখ্যা।

11

একই সমস্যা — LIKE vs REGEXP

১০ মিনিট

Starts with A:

LIKE

LIKE 'A%'

REGEXP

REGEXP '^A'

Exactly 3 letters + 3 digits → LIKE কঠিন; REGEXP সোজা।

RequirementLIKEREGEXP
Starts with AEasyEasy
Ends with nEasyEasy
Contains RahEasyEasy
A/B/C startLess convenientEasy
Exactly 3 letters/digitsDifficultEasy
Complex structurePoor fitStrong fit
সহজ সমস্যায় LIKE; জটিল নিয়মে REGEXP। সবসময় সবচেয়ে সিম্পল টুল বেছে নাও।
12

Workbench ল্যাব

২০ মিনিট
CREATE DATABASE regexp_demo; USE regexp_demo; CREATE TABLE customers ( customer_id INT, customer_name VARCHAR(80), email VARCHAR(80), phone VARCHAR(30), city VARCHAR(50) ); INSERT INTO customers VALUES (1,'Ahmed','ahmed@gmail.com','01712345678','Dhaka'), (2,'Rahman','r@yahoo.com','+8801812345678','Chittagong'), (3,'Karim','k@gmail.com','017-99999999','Dhaka'), (4,'Salma','s@company.bd','01912345678','Sylhet'), (5,'Anika','a@gmail.com','ABC123','Barisal'), (6,'Hasan','h@outlook.com','01812345678','Dhaka'), (7,'Babu','b@gmail.com','01512345678','Rajshahi'), (8,'Nadia','n@yahoo.com','01612345678','Chittagong'), (9,'Omar','o@gmail.com','01312345678','Dhaka'), (10,'Rafi','invalid-email','01700000000','Sylhet'); CREATE TABLE employees ( employee_id INT, employee_name VARCHAR(80), department VARCHAR(50), employee_code VARCHAR(20) ); INSERT INTO employees VALUES (1,'Arif','IT','EMP001'), (2,'Mitu','HR','EMP002'), (3,'Jamal','Sales','EMPABC'), (4,'Lira','Finance','HR001'), (5,'Shuvo','IT','EMP12'), (6,'Tania','Data','EMP100'), (7,'Imran','IT','ABC'), (8,'Keya','HR','EMP103'), (9,'Anik','Sales','IT2001'), (10,'Farah','Data','EMP204'); CREATE TABLE products ( product_id INT, product_name VARCHAR(80), product_code VARCHAR(20) ); INSERT INTO products VALUES (1,'Phone A','IPHONE-001'), (2,'Phone B','SAM-100'), (3,'Laptop','LAPTOP-500'), (4,'TV','SAM-101'), (5,'Case','ABC'), (6,'Watch','XYZ456'), (7,'Tablet','TAB789'), (8,'Mouse','MSE12');

অনুশীলন কোয়েরি

SELECT * FROM customers WHERE email REGEXP 'gmail'; SELECT * FROM customers WHERE customer_name REGEXP '^A'; SELECT * FROM customers WHERE customer_name REGEXP 'n$'; SELECT * FROM customers WHERE customer_name REGEXP '^[ABC]'; SELECT * FROM employees WHERE employee_code REGEXP '[0-9]'; SELECT * FROM employees WHERE employee_code REGEXP '^[A-Z]{3}[0-9]{3}$'; SELECT * FROM customers WHERE city REGEXP 'Dhaka|Chittagong'; SELECT * FROM products WHERE product_code REGEXP '^[A-Z]{3}[0-9]{3}$'; SELECT * FROM employees WHERE employee_name REGEXP '^A' ORDER BY employee_name LIMIT 5;
13

REGEXP + অন্যান্য ক্লজ

১০ মিনিট
SELECT * FROM employees WHERE employee_name REGEXP '^A' ORDER BY employee_name; SELECT * FROM employees WHERE employee_name REGEXP '^A' LIMIT 5; SELECT DISTINCT city FROM customers WHERE city REGEXP '^D';
FROM → WHERE+REGEXP → SELECT → DISTINCT → ORDER BY → LIMIT
14

কমন বিগিনার ভুল

১০ মিনিট

1. REGEXP-এ %

-- ভুল REGEXP '%Rah%' -- ঠিক (contains) REGEXP 'Rah'

% হলো LIKE wildcard — সাধারণ regex নয়।

2. ^ vs $ গুলিয়ে ফেলা

^ শুরু, $ শেষ।

3. * vs +

* = ০ বা বেশি; + = অন্তত ১।

4. Quotes ভুলে যাওয়া

5. সহজ সমস্যায় অতিরিক্ত regex

প্রফেশনালরা সবচেয়ে সিম্পল টুল বেছে নেয় — LIKE যথেষ্ট হলে REGEXP জোর করে না।

6. সব DB এক নয়

MySQL / PostgreSQL / SQL Server regex সাপোর্ট আলাদা হতে পারে।

15

ইন্ডাস্ট্রি ব্যবহার

৫ মিনিট
ক্ষেত্রকাজ
Data QualityMalformed ID খোঁজা
AnalyticsEmail/phone pattern
E-commerceProduct code সার্চ
HREmployee ID validate
FinanceReference pattern
Data EngSuspicious records
Data ScienceText EDA
BackendStructured search
16

Data Quality কেস স্টাডি

১৫ মিনিট

Valid ID: EMP001 স্টাইল — ৩ letter + ৩ digit। DB-তে মিশ্রণ:

EMP001 EMP002 EMPABC HR001 EMP12 EMP100 ABC

Valid

SELECT * FROM employees WHERE employee_code REGEXP '^[A-Z]{3}[0-9]{3}$';

Invalid (মিলছে না)

SELECT * FROM employees WHERE employee_code NOT REGEXP '^[A-Z]{3}[0-9]{3}$';
Invalid examples: EMPABC, HR001 (letter+digit মিললেও ৩+৩ নয় যদি format আলাদা), EMP12, ABC
17

ক্লাসরুম অ্যাক্টিভিটি (১২+)

ইন্টারঅ্যাক্টিভ
1. ^A মানে?
A দিয়ে শুরু।
2. n$ মানে?
n দিয়ে শেষ।
3. ^[A-Z]{3}[0-9]{3}$ — ABC123?
মিলবে।
4. একই pattern — AB123?
মিলবে না (২ letter)।
5. ABCD123?
মিলবে না (৪ letter)।
6. abc123?
মিলবে না (lowercase)।
7. LIKE নাকি REGEXP — “Rah দিয়ে শুরু”?
LIKE 'Rah%' যথেষ্ট (বা REGEXP '^Rah')।
8. LIKE নাকি REGEXP — “৩ letter + ৩ digit”?
REGEXP।
9. ভুল: REGEXP '%A%' — কেন?
% LIKE-এর; REGEXP-এ contains হলে শুধু 'A'।
10. Predict: REGEXP 'Dhaka|Sylhet'
দুটোর যেকোনো একটা।
11. Build: EMP + exactly 3 digits
^EMP[0-9]{3}$
12. [0-9] মানে?
যেকোনো এক digit।
18

Regex Cheat Sheet

রেফারেন্স
SymbolMeaningExample idea
^Start^A
$Endn$
.Any one charA.C
[abc]One of a/b/c^[ABC]
[0-9]Digithas number
[A-Z]Uppercode letters
[a-z]Lower
*0+
+1+
?0 or 1
{n}Exactly n{3}
{n,m}n to m{2,4}
|ORA|B
19

Pattern building ধাপে ধাপে

১০ মিনিট

Requirement: EMP দিয়ে শুরু + exactly ৩ digit।

Starts with → ^ EMP → EMP Exactly 3 digits → [0-9]{3} End → $ Final: ^EMP[0-9]{3}$
WHERE employee_code REGEXP '^EMP[0-9]{3}$'
20

Execution flow (শিক্ষার মডেল)

৫ মিনিট
FROM → WHERE (REGEXP এখানে) → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT
REGEXP সাধারণত WHERE-এর ভিতরে condition হিসেবে কাজ করে। এটা সরলীকৃত লজিক্যাল মডেল।
21

Performance tips

৫ মিনিট
  • সিম্পল pattern ভালো।
  • জটিল regex বড় টেবিলে ব্যয়বহুল হতে পারে।
  • = বা LIKE যথেষ্ট হলে সেটাই ব্যবহার করো।
  • আগে অন্য ফিল্টার দিয়ে ডেটা ছোট করো।
  • কিছু pattern-এ index কম কাজে লাগে।
22

Revision

৫ মিনিট
  • Regex = text-এর জন্য rule/pattern
  • LIKE = simple; REGEXP = powerful
  • ^ $ [ ] {n} | . * + ?
LIKE = simple pattern search REGEXP = powerful rule-based pattern search ^EMP[0-9]{3}$ → EMP + exactly 3 digits
23

MCQ (২০+)

কুইজ
১. REGEXP কী? (ক) DELETE (খ) Complex pattern match (গ) JOIN (ঘ) INDEX
(খ)
২. ^ মানে?
শুরু
৩. $ মানে?
শেষ
৪. [0-9]?
যেকোনো digit
৫. {3}?
ঠিক ৩ বার
৬. | মানে?
OR
৭. REGEXP '%A%' ভুল কেন?
% LIKE-এর wildcard
৮. Starts A — REGEXP?
'^A'
৯. Ends n?
'n$'
১০. Contains Rah?
'Rah'
১১. ৩ letter + ৩ digit?
'^[A-Z]{3}[0-9]{3}$'
১২. * vs +?
0+ vs 1+
১৩. . মানে?
যেকোনো এক character
১৪. LIKE যথেষ্ট হলে?
LIKE ব্যবহার করো
১৫. [ABC] শুরু?
'^[ABC]'
১৬. NOT REGEXP কেন?
Invalid / non-matching খুঁজতে
১৭. RLIKE?
MySQL-এ REGEXP-এর মতো
১৮. সব DB এক regex?
না
১৯. WHERE-এ REGEXP?
হ্যাঁ
২০. EMP + ৩ digit?
'^EMP[0-9]{3}$'
২১. % LIKE-এর মানে?
যেকোনো সংখ্যক অক্ষর (LIKE)
২২. {2,4}?
২ থেকে ৪ বার
24

Viva (২০+)

প্র্যাকটিস
1. REGEXP কী?
Regex pattern দিয়ে মিল খোঁজা।
2. Regular expression কী?
Text-এর জন্য rule/pattern।
3. কেন ব্যবহার?
জটিল pattern / validation।
4. LIKE vs REGEXP?
Simple vs powerful.
5. ^?
Start
6. $?
End
7. [0-9]?
Digit
8. +?
One or more
9. *?
Zero or more
10. {3}?
Exactly 3
11. |?
OR
12. WHERE সাথে?
হ্যাঁ
13. ORDER BY সাথে?
হ্যাঁ
14. LIMIT সাথে?
হ্যাঁ
15. % REGEXP-এ?
সাধারণত নয় — LIKE-এর
16. . মানে?
Any one char
17. Data quality উদাহরণ?
Invalid EMP codes
18. সহজ starts — কোনটা?
LIKE 'A%' যথেষ্ট হতে পারে
19. NOT REGEXP?
Pattern মিলে না
20. Final takeaway?
LIKE simple; REGEXP complex rules
21. RLIKE?
MySQL synonym-ish for REGEXP
25

Interview Top 30

প্রস্তুতি
1. REGEXP কী?
Regex match। উদাহরণ: REGEXP '^A'। ভুল: % ব্যবহার। ফলো-আপ: LIKE কখন? ইউজ: validation।
2. LIKE vs REGEXP
Simple vs powerful। ভুল: সবসময় REGEXP। ফলো-আপ: ৩+৩ digit? ইউজ: টুল সিলেকশন।
3. ^ vs $
Start vs end। ভুল: উল্টো। ফলো-আপ: উদাহরণ। ইউজ: prefix/suffix।
4. Starts with A
REGEXP '^A' বা LIKE 'A%'। ভুল: 'A$'। ফলো-আপ: case? ইউজ: নাম ফিল্টার।
5. Ends with n
'n$'। ভুল: '^n'। ফলো-আপ: Hasan? ইউজ: সারনেম।
6. Contains Rah
'Rah'। ভুল: '%Rah%'। ফলো-আপ: LIKE? ইউজ: সার্চ।
7. IDs with numbers
'[0-9]'। ভুল: LIKE '[0-9]'। ফলো-আপ: only digits? ইউজ: QA।
8. 3 letters + 3 digits
'^[A-Z]{3}[0-9]{3}$'। ভুল: LIKE। ফলো-আপ: lowercase? ইউজ: codes।
9. Emails .com
REGEXP '\\.com$' বা '\\.com$' (engineভেদে)। সহজ: 'com$' সাবধান। ভুল: LIKE confusion। ফলো-আপ: .bd? ইউজ: domain।
10. Code format
Full ^...$ anchor। ভুল: partial। ফলো-আপ: invalid খুঁজবে? ইউজ: DQ।
11. * vs +
0+ vs 1+। ভুল: একই। ফলো-আপ: উদাহরণ। ইউজ: optional parts।
12. |
OR। উদাহরণ: Dhaka|Chittagong। ভুল: AND ভাবা। ফলো-আপ: brackets? ইউজ: multi-city।
13. .
Any one. ভুল: %। ফলো-আপ: A.C? ইউজ: masks।
14. [ABC]
One of. ভুল: sequence। ফলো-আপ: ^[ABC]? ইউজ: prefix set।
15. {n,m}
Range count. ভুল: {n}। ফলো-আপ: {2,4}? ইউজ: length rules।
16. NOT REGEXP
Non-match rows. ভুল: !=। ফলো-আপ: invalid IDs। ইউজ: cleansing.
17. Performance
Complex = costly. ভুল: সব REGEXP। ফলো-আপ: index? ইউজ: large tables।
18. DB differences
Engines differ. ভুল: copy-paste সব DB। ফলো-আপ: Postgres? ইউজ: portability।
19. EMP + 3 digits
^EMP[0-9]{3}$। ভুল: EMP%. ফলো-আপ: EMP1001? ইউজ: HR IDs।
20. Build method
^ → literal → class → {n} → $। ভুল: একসাথে লেখা। ফলো-আপ: শেখাও। ইউজ: teaching.
21. ORDER BY + REGEXP
Filter then sort. ভুল: regex sorts. ফলো-আপ: LIMIT? ইউজ: UI lists.
22. DISTINCT + REGEXP
Pattern then unique. ভুল: একই জিনিস। ফলো-আপ: cities ^D। ইউজ: unique prefixes.
23. When NOT to use
Exact = or simple LIKE. ভুল: habit REGEXP। ফলো-আপ: উদাহরণ। ইউজ: code review.
24. Phone patterns
Rules for digits; keep beginner. ভুল: full validator day-1। ফলো-আপ: LIKE enough? ইউজ: support.
25. Product SAM-
Can combine literal + digits. ভুল: only LIKE %। ফলো-আপ: design pattern। ইউজ: catalog.
26. Case sensitivity
Collation/engine dependent. ভুল: always insensitive। ফলো-আপ: [A-Za-z]? ইউজ: codes.
27. Quotes
Pattern in quotes. ভুল: bare. ফলো-আপ: escape? ইউজ: syntax.
28. RLIKE
MySQL REGEXP alias-like. ভুল: another language. ফলো-আপ: docs? ইউজ: MySQL.
29. Common bug % in REGEXP
Use REGEXP 'x' not '%x%'। ভুল: empty surprise. ফলো-আপ: fix। ইউজ: debugging.
30. Final rule
LIKE simple; REGEXP complex rules. ভুল: regex expert claim. ফলো-আপ: choose tool. ইউজ: daily SQL.
26

Homework

বাসার কাজ

প্রশ্ন

  1. Names starting with A
  2. Names ending with n
  3. Names containing Rah
  4. Values containing numbers
  5. Employee IDs EMP + 3 digits
  6. Product codes 3 letters + 3 numbers
  7. Emails ending with .com (careful with dots)
  8. Cities starting with D or C
  9. Invalid employee IDs (NOT matching 3+3)
  10. REGEXP + ORDER BY + LIMIT

উত্তর (ক্লিক)

উত্তর ১
WHERE name REGEXP '^A'
উত্তর ২
WHERE name REGEXP 'n$'
উত্তর ৩
WHERE name REGEXP 'Rah'
উত্তর ৪
WHERE col REGEXP '[0-9]'
উত্তর ৫
WHERE employee_code REGEXP '^EMP[0-9]{3}$'
উত্তর ৬
WHERE product_code REGEXP '^[A-Z]{3}[0-9]{3}$'
উত্তর ৭
WHERE email REGEXP '\\.com$' (বা engine-এর মতো escape) — বিগিনার বিকল্প: LIKE '%.com' যদি যথেষ্ট।
উত্তর ৮
WHERE city REGEXP '^[DC]' বা '^D|^C'
উত্তর ৯
WHERE employee_code NOT REGEXP '^[A-Z]{3}[0-9]{3}$'
উত্তর ১০
WHERE name REGEXP '^A' ORDER BY name LIMIT 5