Biểu thức Chính quy Là Gì? Giải thích Đầy đủ
Trả lời nhanh
Regular expression là pattern mô tả một tập chuỗi. Nó dùng literal character và metacharacter (*, +, ?, ., ^, $, [], (), {}, |, \) với ý nghĩa đặc biệt. Regex dùng cho validation, search, extraction và replacement. Dùng Regex Tester miễn phí.
Giới thiệu
Regular expression (regex hoặc regexp) là chuỗi ký tự định nghĩa pattern search. Pattern được dùng bởi thuật toán string-searching để tìm, match hoặc replace văn bản. Regular expression xuất xứ từ lý thuyết ngôn ngữ formal thập niên 1950 (Stephen Kleene) và được adopt vào công cụ văn bản Unix (grep, sed, awk) thập niên 1970. Hôm nay regex được built-in vào thực tế mọi ngôn ngữ lập trình và editor.
Từng bước một
-
Hiểu nghĩa đen và siêu ký tự
Các ký tự chữ (a, b, 1, @) khớp với nhau. Siêu ký tự có ý nghĩa đặc biệt: . khớp với bất kỳ ký tự nào, * có nghĩa là không hoặc nhiều hơn, + có nghĩa là một hoặc nhiều, ? có nghĩa là không hoặc một, ^ trận đấu bắt đầu, $ trận đấu kết thúc.
-
Tìm hiểu các lớp nhân vật
Dấu ngoặc vuông [] xác định một lớp ký tự - [aeiou] khớp với bất kỳ nguyên âm nào, [0-9] khớp với bất kỳ chữ số nào, [^0-9] khớp với bất kỳ chữ số nào. Các lớp viết tắt: \d (chữ số), \w (ký tự từ), \s (khoảng trắng) và các phủ định viết hoa của chúng.
-
Sử dụng bộ định lượng
Bộ định lượng chỉ định số lần lặp lại của một mẫu: * (0+), + (1+), ? (0 hoặc 1), {n} (chính xác là n), {n,} (n+), {n,m} (n đến m). Tham lam theo mặc định; thêm vào ? để khớp lười (ví dụ: *?).
-
Nhóm và neo
Dấu ngoặc đơn () tạo nhóm chụp. Thay thế | khớp với hai bên (mèo|chó). Các neo ^ và $ khớp với điểm bắt đầu và kết thúc của chuỗi. Sử dụng những thứ này để xây dựng các mẫu phức tạp từ những mẫu đơn giản hơn.
Ví dụ
Khớp mẫu giống như email
đầu vào: Pattern: [a-z]+@[a-z]+\.[a-z]+
đầu ra: Trận đấu: alice@example.com, bob@test.org
Khớp định dạng số điện thoại
đầu vào: Pattern: \d{3}-\d{3}-\d{4}
đầu ra: Matches: 555-123-4567
Trích xuất các cặp khóa-giá trị
đầu vào: Pattern: (\w+)=(\w+)
đầu ra: Matches 'key=value' with group 1 as key, group 2 as value
Các vấn đề thường gặp
- Sự kết hợp tham lam tiêu thụ quá mức —.* phù hợp càng nhiều càng tốt. Sử dụng .*? cho việc kết hợp lười biếng để tìm kết quả phù hợp ngắn nhất.
- Quên thoát các ký tự đặc biệt —., *, +, ?, v.v. là đặc biệt. Sử dụng \ để khớp chúng theo nghĩa đen (ví dụ: \. khớp với một dấu chấm theo nghĩa đen).
- Quay lui thảm khốc —các mẫu có bộ định lượng lồng nhau (ví dụ: (a+)+) có thể mất thời gian theo cấp số nhân đối với một số đầu vào nhất định, gây ra các cuộc tấn công ReDoS.
- Quá khớp —không có neo (^ và $), một mẫu sẽ khớp ở bất kỳ đâu. Sử dụng ^...$ để khớp với toàn bộ chuỗi.
Mẹo
- Bắt đầu đơn giản và tăng dần độ phức tạp — việc gỡ lỗi một biểu thức chính quy phức tạp cùng một lúc là rất khó.
- Sử dụng trình kiểm tra biểu thức chính quy để thử nghiệm các mẫu dựa trên văn bản mẫu —xem các kết quả phù hợp được đánh dấu trong thời gian thực.
- Nhận xét các biểu thức chính quy phức tạp bằng chế độ mở rộng (cờ/x trong một số công cụ) hoặc chia chúng thành các phần được đặt tên.
- Sử dụng Trình kiểm tra Regex của chúng tôi để kiểm tra các mẫu ngay lập tức trong trình duyệt của bạn — không cần đăng ký, hoàn toàn riêng tư.