Regular Expression (Regex) là gì? Ứng dụng thực tế của Regex
🧠 Regular Expression (Regex) là gì?
Regular Expression hay Regex là một ngôn ngữ mẫu (pattern language) dùng để tìm kiếm, khớp (match), trích xuất hoặc thay thế chuỗi văn bản theo các quy tắc nhất định.
✅ Hiểu đơn giản: Regex = công cụ tìm kiếm nâng cao bằng cách dùng mẫu ký tự thay vì từ khóa thông thường.
📌 Ví dụ nhanh:
| Mẫu Regex | Khớp với |
|---|---|
abc |
"abc" trong "abc123" |
\d |
Bất kỳ chữ số nào (0–9) |
\w+ |
Một hoặc nhiều ký tự từ (word) |
^Hello |
Chuỗi bắt đầu bằng "Hello" |
\d{3}-\d{4} |
Số dạng 123-4567 |
🧰 Ứng dụng thực tế của Regex
-
✅ Kiểm tra định dạng email, số điện thoại, mã số sinh viên...
-
✅ Tìm tất cả số trong văn bản
-
✅ Trích xuất địa chỉ IP, URL, timestamp trong log
-
✅ Làm sạch văn bản (remove HTML, khoảng trắng dư thừa...)
🐍 Regex trong Python
Dùng module re có sẵn:
import re
# Tìm tất cả số trong chuỗi
text = "There are 3 cats, 7 dogs and 12 birds."
numbers = re.findall(r"\d+", text)
print(numbers) # ['3', '7', '12']
🔣 Một số ký hiệu regex cơ bản
| Ký hiệu | Ý nghĩa |
|---|---|
. |
Bất kỳ ký tự nào (trừ newline) |
\d |
Một chữ số (0-9) |
\w |
Một ký tự từ (chữ, số hoặc _) |
\s |
Một khoảng trắng |
+ |
Một hoặc nhiều lần |
* |
Không hoặc nhiều lần |
? |
0 hoặc 1 lần |
{n} |
Lặp đúng n lần |
[] |
Tập hợp ký tự (vd: [aeiou]) |
^ |
Bắt đầu chuỗi |
$ |
Kết thúc chuỗi |
🧪 Ví dụ nâng cao
# Kiểm tra định dạng email đơn giản
email = "user@example.com"
pattern = r"^[\w\.-]+@[\w\.-]+\.\w+$"
if re.match(pattern, email):
print("Email hợp lệ")
✅ Tổng kết
| Nội dung | Giải thích |
|---|---|
| Regular Expression | Mẫu dùng để tìm kiếm, so khớp chuỗi |
| Ứng dụng | Kiểm tra định dạng, tìm kiếm, trích xuất |
| Trong Python | Dùng module re |
| Ghi nhớ | Regex là công cụ mạnh, nhưng cần luyện tập để thành thạo |
Tuyệt! Dưới đây là các ví dụ cụ thể về Regex áp dụng trong:
-
🧾 Log hệ thống
-
📧 Email
Đây là những trường hợp cực kỳ thực tế trong NLP, bảo mật, phân tích hệ thống, và làm sạch dữ liệu.
🧾 1. Regex áp dụng trong log
✅ Ví dụ log dòng hệ thống:
[2025-11-26 14:35:02] ERROR VM vm-101 crashed due to memory overload
🔍 Mục tiêu: Trích xuất từng phần
| Trích gì | Regex | Giải thích |
|---|---|---|
| Timestamp | \[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\] |
Dấu [] và định dạng ngày giờ |
| Mức độ log | `INFO | WARN |
| VM ID | vm-\d+ |
vm-101, vm-7,... |
| Lý do lỗi | due to (.+) |
Lấy phần sau "due to" |
🧪 Python demo:
import re
log = "[2025-11-26 14:35:02] ERROR VM vm-101 crashed due to memory overload"
timestamp = re.search(r"\[(.*?)\]", log).group(1)
level = re.search(r"(INFO|WARN|ERROR|DEBUG)", log).group(1)
vm_id = re.search(r"vm-\d+", log).group()
reason = re.search(r"due to (.+)", log).group(1)
print(f"🕒 {timestamp} | 🔥 {level} | 🖥️ {vm_id} | ❗ Lý do: {reason}")
📧 2. Regex kiểm tra và trích email
✅ Kiểm tra email hợp lệ
Regex đơn giản:
^[\w\.-]+@[\w\.-]+\.\w{2,}$
| Thành phần | Giải thích |
|---|---|
^[\w\.-]+ |
Tên người dùng (chữ, số, _, . hoặc -) |
@[\w\.-]+ |
Tên miền |
\.\w{2,}$ |
Đuôi tên miền như .com, .edu, .vn |
🧪 Python demo:
import re
email = "nguyen.van.a@gmail.com"
pattern = r"^[\w\.-]+@[\w\.-]+\.\w{2,}$"
if re.match(pattern, email):
print("✅ Email hợp lệ")
else:
print("❌ Email không hợp lệ")
🔎 Trích xuất email từ văn bản
text = "Liên hệ với tôi qua nguyen.a@gmail.com hoặc admin@company.vn"
emails = re.findall(r"[\w\.-]+@[\w\.-]+\.\w{2,}", text)
print(emails)
# ➜ ['nguyen.a@gmail.com', 'admin@company.vn']
🔧 Bonus: Regex kết hợp trong phân tích log chứa email
[2025-11-26 10:00:00] INFO User nguyen.a@gmail.com logged in from IP 192.168.1.10
Regex trích cả:
-
Timestamp
-
Email
-
IP
log = "[2025-11-26 10:00:00] INFO User nguyen.a@gmail.com logged in from IP 192.168.1.10"
timestamp = re.search(r"\[(.*?)\]", log).group(1)
email = re.search(r"[\w\.-]+@[\w\.-]+\.\w{2,}", log).group()
ip = re.search(r"\d{1,3}(?:\.\d{1,3}){3}", log).group()
print(f"🕒 {timestamp} | 📧 {email} | 🌐 IP: {ip}")
✅ Tổng kết
| Ứng dụng | Regex gợi ý |
|---|---|
| Trích ngày giờ trong log | \[(.*?)\] |
| Tìm mức độ log | `INFO |
[\w\.-]+@[\w\.-]+\.\w{2,} |
|
| Địa chỉ IP | \d{1,3}(?:\.\d{1,3}){3} |
| Mã lỗi / ID | vm-\d+, err-\d+, id_\w+ |