Regular Expression Pattern
Ngôn ngữ mẫu để tìm kiếm và thay thế văn bản. Kết hợp ký tự đặc biệt và ký tự chữ để định nghĩa mẫu chuỗi.
Mẫu biểu thức chính quy (regex) là ngôn ngữ mẫu để tìm kiếm, thay thế và xác thực văn bản. Nó kết hợp ký tự chữ (khớp chính xác) với ký tự meta (có ý nghĩa đặc biệt) để định nghĩa mẫu chuỗi. Ví dụ, \d{3}-\d{4} khớp mẫu mã bưu điện Nhật Bản như "123-4567". Regex được hỗ trợ trong hầu hết ngôn ngữ lập trình, trình soạn thảo văn bản và công cụ dòng lệnh.
Các ký tự meta cơ bản bao gồm: . (bất kỳ ký tự nào), * (không hoặc nhiều lần), + (một hoặc nhiều lần), ? (không hoặc một lần), [] (lớp ký tự), () (nhóm), | (luân phiên), ^ (đầu dòng), $ (cuối dòng). Kết hợp chúng tạo ra các mẫu mạnh mẽ: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ xác thực định dạng email. Bạn có thể tham khảo sách nhập môn regex về cú pháp cơ bản.
Cờ regex sửa đổi hành vi khớp. g (global) tìm tất cả khớp thay vì dừng ở khớp đầu tiên. i (case-insensitive) bỏ qua phân biệt hoa thường. m (multiline) làm cho ^ và $ khớp đầu/cuối dòng thay vì đầu/cuối chuỗi. s (dotAll) làm cho . khớp cả ký tự xuống dòng. Trong JavaScript: /pattern/flags hoặc new RegExp('pattern', 'flags').
Regex được sử dụng rộng rãi trong phát triển web. Xác thực biểu mẫu (email, số điện thoại, mã bưu điện), phân tích log máy chủ, tìm kiếm và thay thế trong trình soạn thảo mã, định tuyến URL trong framework web, và web scraping đều dựa vào regex. Tuy nhiên, regex không phù hợp cho phân tích HTML/XML phức tạp - nên sử dụng trình phân tích DOM thay thế.
Một quan niệm sai lầm phổ biến là regex phức tạp hơn luôn tốt hơn. Trên thực tế, regex quá phức tạp khó đọc, khó bảo trì và có thể có vấn đề hiệu suất (thảm họa quay lui). Nguyên tắc tốt là: nếu regex vượt quá một dòng, cân nhắc chia thành nhiều bước hoặc sử dụng trình phân tích chuyên dụng. Cờ x (verbose) cho phép thêm khoảng trắng và bình luận để cải thiện khả năng đọc. Bạn có thể tham khảo sách regex thực hành để tìm hiểu thêm.
Từ góc độ đếm ký tự, regex là công cụ mạnh mẽ cho đếm ký tự có điều kiện. Đếm chỉ chữ cái (/[a-zA-Z]/g), chỉ chữ số (/\d/g), hoặc chỉ ký tự tiếng Nhật (/[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF]/g) đều có thể thực hiện bằng regex. Công cụ đếm ký tự sử dụng regex nội bộ để cung cấp phân tích chi tiết.