Công cụ này làm gì
Trình kiểm tra regex PCRE đối chiếu một biểu thức chính quy với văn bản của bạn bằng thư viện PCRE2 thật, cùng engine mà PHP, các công cụ kiểu Perl và nhiều máy chủ web sử dụng. Các kết quả khớp được tô sáng, mỗi kết quả được liệt kê kèm vị trí và các nhóm bắt, và phần thay thế tùy chọn cho thấy kết quả của phép thay thế kiểu preg_replace.
Kiểm tra bằng engine thật rất quan trọng vì biểu thức chính quy PCRE và JavaScript khác nhau ở những điểm nhỏ nhưng quan trọng. Một mẫu chạy được trong trình kiểm tra trên trình duyệt có thể không biên dịch được trong PHP, hoặc khớp ra kết quả khác.
Cách sử dụng
- Gõ mẫu không có dấu phân cách vào ô Mẫu PCRE (không có dấu phân cách).
- Dán văn bản cần tìm vào ô Chuỗi kiểm tra.
- Bật các modifier cần thiết: g để lấy mọi kết quả khớp (như preg_match_all), i, m, s, x, U, và u để
\w,\dvà\bnhận biết Unicode. - Có thể điền Thay bằng để xem trước phép thay thế. Dùng
$1hoặc${1}cho nhóm đánh số,${name}cho nhóm có tên và$0cho toàn bộ kết quả khớp.
Mẫu không hợp lệ sẽ hiển thị thông báo lỗi của chính PCRE2 và vị trí trong mẫu nơi nó dừng lại.
Ví dụ
Mẫu mặc định \((?:[^()]++|(?R))*\) tìm các cặp ngoặc cân bằng. Nó khớp một cặp ngoặc chứa hoặc các ký tự không phải ngoặc, hoặc (một cách đệ quy) lại chính toàn bộ mẫu. Trên văn bản ví dụ, nó tìm được (a, g(b, c)) và ((x), y) và bỏ qua dấu ngoặc chưa đóng ở cuối. Biểu thức chính quy JavaScript không thể diễn đạt điều này.
Hãy thử (?<amount>\d+(?:\.\d+)?)\s+(?<cur>USD|EUR) với chuỗi thay thế ${cur} $1 để đổi chỗ số tiền và mã tiền tệ ở dòng thứ hai.
Các tính năng PCRE nên biết
- Lượng từ sở hữu (
*+,++,?+) và nhóm nguyên tử ((?>...)) không bao giờ trả lại phần đã khớp, giúp ngăn quay lui mất kiểm soát. \Kđặt lại điểm bắt đầu của kết quả khớp, một cách thay thế đơn giản cho lookbehind.- Đệ quy với
(?R),(?1)hoặc(?&name)khớp được các cấu trúc lồng nhau. - Modifier nội tuyến như
(?i)thay đổi hành vi cho một phần của mẫu.
Mẹo
- Trong PHP, hãy bọc mẫu trong dấu phân cách như
/.../hoặc~...~và chọn ký tự không xuất hiện trong mẫu, để khỏi phải escape nó. - Bật u khi văn bản có chữ cái có dấu hoặc ký tự CJK để
\wkhớp được chúng.
Câu hỏi thường gặp
› Công cụ này khác gì so với trình kiểm tra regex JavaScript?
Trang này chạy PCRE2, engine đứng sau các hàm preg_ của PHP, Nginx, Apache và nhiều công cụ khác, được biên dịch sang WebAssembly. Nó hỗ trợ những cú pháp mà JavaScript không có, như đệ quy với (?R), lượng từ sở hữu như a++, nhóm nguyên tử, \K, nhóm (?P<name>...) và các modifier x và U.
› Tôi có cần gõ dấu phân cách, như /pattern/i không?
Không. Chỉ nhập mẫu và bật modifier bằng các ô đánh dấu. Trong PHP, `preg_match('/\d+/i', $s)` tương ứng với mẫu `\d+` khi bật Không phân biệt hoa thường.
› Tại sao tôi gặp lỗi "match limit exceeded"?
Một số mẫu, như ^(a+)+$ trên một chuỗi dài không khớp, sẽ quay lui (backtrack) với số lần tăng theo cấp số mũ. Công cụ dừng lại sau năm triệu bước để trang vẫn phản hồi. PHP cũng có cơ chế bảo vệ tương tự là pcre.backtrack_limit, và preg_match trả về false khi chạm giới hạn này.
› Văn bản của tôi có bị tải lên không?
Không. Module PCRE2 WebAssembly chỉ được tải về một lần và mọi thứ chạy trong trình duyệt của bạn.