Bỏ qua đến nội dung
LeedyBox
Ủng hộ

Kiểm tra RegEx, thay thế & bảng tra cứu

Kiểm tra biểu thức chính quy với phần khớp và nhóm bắt được tô sáng, xem trước kết quả thay thế và sao chép mẫu thành mã cho sáu ngôn ngữ.

Cờ
Phần khớp: 0

Chi tiết phần khớp và nhóm bắt

Bảng tra cứu

Nhấp vào một mẫu để tải nó cùng văn bản ví dụ.

Tham khảo cú pháp

Ký tự

.Bất kỳ ký tự nào trừ xuống dòng (với s: kể cả xuống dòng)
\d \DChữ số 0–9 / không phải chữ số
\w \WKý tự từ (A–Z, a–z, 0–9, _) / không phải ký tự từ
\s \SKhoảng trắng / không phải khoảng trắng
[abc] [^abc]Một trong a, b, c / bất kỳ trừ a, b, c
[a-z]Một ký tự trong khoảng a đến z
\p{L}Chữ cái của bất kỳ ngôn ngữ nào (cần cờ u)
\. \\ \(Thoát ký tự đặc biệt để khớp đúng nghĩa đen

Lượng từ

* + ?0 lần trở lên / 1 lần trở lên / 0 hoặc 1 lần
{n} {n,} {n,m}Đúng n / n trở lên / từ n đến m
*? +? {n,m}?Lười: khớp ít ký tự nhất có thể

Neo

^ $Đầu / cuối văn bản (mỗi dòng nếu có m)
\b \BRanh giới từ / không phải ranh giới từ

Nhóm & lookaround

(…)Nhóm bắt, dùng là $1, $2 …
(?:…)Nhóm không bắt
(?<name>…)Nhóm có tên, dùng là $<name>
\1 \k<name>Tham chiếu ngược: cùng văn bản mà nhóm đã khớp
a|ba hoặc b
(?=…) (?!…)Theo sau là / không theo sau là
(?<=…) (?<!…)Đứng trước là / không đứng trước là

Thay thế

$1 $<name>Văn bản của nhóm đánh số hoặc nhóm có tên
$& $$Toàn bộ phần khớp / ký tự $

Hãy kiểm tra kết quả trước khi dùng. Công cụ được cung cấp nguyên trạng, không kèm bảo đảm, và kết quả có thể chưa đầy đủ hoặc không chính xác. Điều khoản dịch vụ

Mẫu được kiểm tra bằng engine biểu thức chính quy của JavaScript. Cú pháp và hành vi có thể khác ở ngôn ngữ và cơ sở dữ liệu khác. Các mẫu trong bảng tra cứu là ví dụ thực tế, không phải bộ kiểm tra đầy đủ.

Cách sử dụng

  1. Nhập mẫu vào "Biểu thức chính quy" mà không kèm hai dấu gạch chéo bao quanh và cờ, rồi dán văn bản vào "Chuỗi kiểm tra". Các phần khớp được tô sáng trong "Phần khớp" và được đếm ngay khi bạn gõ. Để bắt đầu từ một ví dụ, hãy nhấp vào một mẫu trong "Bảng tra cứu"; thao tác này thay thế mẫu, cờ, chuỗi kiểm tra và thiết lập thay thế hiện tại.
  2. Đánh dấu các cờ bạn cần trong "Cờ"; di chuột lên một chữ cái để xem tác dụng của nó. Cờ g và u được bật khi trang mở. Khi không có g, chỉ phần khớp đầu tiên được tìm thấy và chỉ phần khớp đó được thay thế.
  3. Đọc "Chi tiết phần khớp và nhóm bắt": mỗi phần khớp được liệt kê kèm vị trí và nội dung của từng nhóm dưới dạng $1, $2, v.v., kèm tên của các nhóm có tên. Bật cờ d để xem thêm vị trí bắt đầu và kết thúc của mỗi nhóm.
  4. Để thử thay thế, hãy đánh dấu "Thay phần khớp bằng" và nhập nội dung thay thế, dùng $1 hoặc $<name> cho các nhóm. Văn bản đã thay đổi hiện trong "Kết quả thay thế", và "Sao chép kết quả" sẽ sao chép nó.
  5. Trong "Tạo mã", chọn JavaScript, Python, Java, PHP, Go hoặc C# rồi nhấp "Sao chép mã". Đoạn mã có kèm phần thay thế khi "Thay phần khớp bằng" được đánh dấu. "Sao chép dạng /mẫu/cờ" sao chép mẫu dưới dạng literal regex của JavaScript.

Câu hỏi thường gặp

Văn bản tôi kiểm tra có được gửi đi đâu không?

Không. Mẫu và chuỗi kiểm tra được so khớp ngay trên trình duyệt của bạn bằng engine regex JavaScript có sẵn trong trình duyệt, và không được tải lên LeedyBox. Công cụ cũng không lưu chúng.

Vì sao mẫu của tôi khớp nhiều văn bản hơn tôi mong đợi?

Mẫu khớp ở bất cứ chỗ nào phù hợp, nên \d{3} cũng tìm thấy 123 bên trong 12345. Hãy thêm \b ở hai đầu để chỉ khớp nguyên từ hoặc nguyên số, hoặc dùng ^ và $ để yêu cầu toàn bộ văn bản phải khớp (từng dòng, khi bật m), như mẫu mật khẩu trong bảng tra cứu. \b dựa vào các ký tự từ của \w (A–Z, a–z, 0–9 và _) và coi các chữ cái như é, đ hoặc 한 là ký tự không thuộc từ, nên \bcafé\b không khớp với café khi theo sau là một dấu cách. Các lượng từ như + và * cũng có tính tham lam: với <b>x</b>, mẫu <.+> khớp toàn bộ chuỗi, còn <.+?> hoặc <[^>]+> dừng lại ở dấu > đầu tiên.

Vì sao một mẫu chạy được trong Python, PHP hoặc Java lại báo Lỗi RegEx ở đây?

Trang này dùng engine JavaScript, vốn không chấp nhận một số cú pháp của engine khác, như nhóm có tên (?P<name>…), cờ nội tuyến như (?i) ở đầu mẫu, nhóm nguyên tử (?>…) và lượng từ sở hữu như a++. Hãy viết nhóm có tên dưới dạng (?<name>…) và dùng các ô đánh dấu trong "Cờ" thay cho cờ nội tuyến. Với cờ u, JavaScript cũng chặt chẽ hơn về ký tự thoát: \# là lỗi, \- bên ngoài dấu ngoặc vuông cũng vậy, nên hãy bỏ dấu gạch chéo ngược hoặc tắt cờ u.

Vì sao \p{L} không khớp chữ cái, hoặc một emoji bị tính là hai ký tự?

Các lớp thuộc tính Unicode như \p{L} cần cờ u; nếu không có cờ này, JavaScript đọc \p{L} thành chuỗi p{L} theo nghĩa đen, và . chỉ khớp một nửa của một ký tự nằm ngoài Mặt phẳng Đa ngôn ngữ Cơ bản (BMP), chẳng hạn nhiều emoji. Khi bạn tải một mẫu từ bảng tra cứu, các cờ của mẫu đó cũng được tải theo, và mọi mẫu trừ "Ký tự đặc biệt" đều tắt cờ u, nên hãy kiểm tra "Cờ" trước khi thêm cú pháp như vậy. Ngay cả khi có u, . chỉ khớp một điểm mã, trong khi một số emoji, như cờ quốc gia hoặc ngón tay cái giơ lên kèm màu da, được tạo từ hai điểm mã trở lên. Vị trí trong chi tiết phần khớp được đếm theo đơn vị mã UTF-16, giống như JavaScript, nên ký tự nằm ngoài BMP chiếm hai vị trí ngay cả khi có u.

Vì sao \n trong phần thay thế không chèn dấu xuống dòng?

Phần thay thế tuân theo quy tắc của replace() trong JavaScript: chỉ những chuỗi bắt đầu bằng $ mới có ý nghĩa đặc biệt, nên \n và \t được chèn nguyên văn thành dấu gạch chéo ngược và một chữ cái, chứ không phải dấu xuống dòng hay tab. Ô này chỉ có một dòng nên không thể nhập dấu xuống dòng ở đây; hãy thêm nó vào mã được tạo. Để xóa các phần khớp, hãy đánh dấu "Thay phần khớp bằng" và để trống ô, như mẫu "Xóa thẻ HTML/XML" trong bảng tra cứu.

Điều gì xảy ra nếu một mẫu chạy rất chậm hoặc tìm thấy rất nhiều phần khớp?

Khi trình duyệt cho phép Web Worker, việc so khớp chạy trong một worker nền và bị dừng sau 2 giây, nên một mẫu gây quay lui thảm họa (catastrophic backtracking), như (a+)+$ trên một dãy dài chữ a theo sau là một ký tự khác, sẽ hiển thị thông báo thay vì làm treo trang. Số đếm trong "Phần khớp" bao gồm mọi phần khớp, nhưng chỉ 1.000 phần khớp đầu tiên được tô sáng và liệt kê trong phần chi tiết.

Tôi có thể dán nguyên mã được tạo vào dự án của mình không?

Hãy dùng nó làm điểm khởi đầu. Trình tạo mã viết mẫu dưới dạng literal regex trong JavaScript và dưới dạng chuỗi trong các ngôn ngữ khác, viết lại nhóm có tên và tham chiếu trong phần thay thế ở những chỗ cú pháp khác nhau, như (?P<name>…) và \g<1> trong Python, ánh xạ các cờ i, m và s, và giả định dữ liệu đầu vào nằm trong một biến tên là text. Nếu mẫu chứa dấu nháy hoặc dấu gạch chéo, hãy kiểm tra xem đoạn mã đã thoát chúng đúng cách chưa. Các engine vẫn khác nhau: gói regexp của Go dùng cú pháp RE2, vốn không hỗ trợ lookaround hay tham chiếu ngược, và module re chuẩn của Python không hỗ trợ lớp \p{…}, nên hãy thử mã với dữ liệu của chính bạn.