Regex Tester: xây dựng và debug mẫu với văn bản thực của bạn
Biểu thức chính quy là một ngôn ngữ nhỏ để mô tả hình dạng của văn bản. Thay vì hỏi "từ chính xác này có ở đây không?", regex cho phép bạn hỏi "có chuỗi nào trông giống thế này không?" Đó là điều làm nó mạnh mẽ để tìm kiếm, kiểm tra hợp lệ, trích xuất và thay thế văn bản trong trình soạn thảo code, file log, đầu vào form và script. Đó cũng là điều khiến nó dễ mắc lỗi, vì một mẫu trông ổn trong đầu bạn có thể âm thầm khớp quá nhiều, quá ít, hoặc không khớp gì cả.
Đó là lý do tại sao kiểm tra tương tác đánh bại việc đoán mò. Khi bạn gõ một mẫu và xem các kết quả khớp sáng lên trên văn bản mẫu thực tế, bạn nhận được phản hồi tức thì: bạn thấy những gì bị bắt, những gì lọt qua, và nhóm capture nào lấy được phần nào. Regex Tester của chúng tôi chạy hoàn toàn trong trình duyệt của bạn. Mẫu và văn bản mẫu của bạn không bao giờ rời khỏi trang, vì vậy bạn có thể dán các dòng log, email, hoặc dữ liệu production mà không gửi bất cứ thứ gì đến server.

Các khối xây dựng đáng biết
Hầu hết các mẫu hàng ngày được lắp ráp từ một tập hợp nhỏ các mảnh. Học những cái này và bạn có thể đọc phần lớn regex mà bạn gặp trong thực tế.
Lớp ký tự mô tả một tập hợp các ký tự được phép. [aeiou] khớp với bất kỳ nguyên âm đơn nào, [0-9] khớp với một chữ số, và [a-zA-Z] khớp với một chữ cái. Dấu mũ bên trong dấu ngoặc phủ định tập hợp, vì vậy [^0-9] có nghĩa là "bất kỳ ký tự nào không phải là chữ số." Các ký tự viết tắt tiết kiệm thao tác: \d là chữ số, \w là ký tự từ (chữ cái, chữ số, dấu gạch dưới), \s là khoảng trắng, và dấu chấm . khớp với hầu hết mọi ký tự đơn.
Bộ định lượng cho biết mảnh trước đó có thể lặp bao nhiêu lần. * có nghĩa là không hoặc nhiều hơn, + có nghĩa là một hoặc nhiều hơn, và ? có nghĩa là không hoặc một (tùy chọn). Để đếm chính xác, {3} có nghĩa là chính xác ba và {2,4} có nghĩa là hai đến bốn. Vì vậy \d{4} khớp với năm có bốn chữ số và colou?r khớp với cả hai cách viết.
Neo gắn mẫu vào một vị trí chứ không phải một ký tự. ^ khớp với đầu văn bản, $ khớp với cuối văn bản, và \b đánh dấu ranh giới từ. Mẫu ^Error chỉ khớp với các dòng bắt đầu bằng "Error", đó chính xác là điều bạn muốn khi quét log.
Nhóm bọc một phần của mẫu trong dấu ngoặc đơn, vừa để áp dụng bộ định lượng cho nhiều ký tự cùng lúc vừa để capture văn bản đã khớp để tái sử dụng. Trong (\d{4})-(\d{2})-(\d{2}) mỗi nhóm capture một thành phần ngày mà bạn có thể trích xuất sau. Luân phiên với ký hiệu pipe hoạt động như "hoặc": cat|dog|fish khớp với bất kỳ một trong ba từ.
Các mẫu bạn thực sự sẽ dùng
Một vài công việc lặp đi lặp lại bao phủ hầu hết công việc thực tế. Để bắt thứ gì đó giống email, [\w.+-]+@[\w-]+\.[\w.-]+ là điểm khởi đầu thực dụng; xác thực email đầy đủ theo đặc tả chính thức nổi tiếng là rắc rối, và mẫu lỏng thường là lựa chọn đúng để làm nổi bật ứng viên hơn là từ chối người dùng.
Để tìm số, \d+ lấy các chuỗi chữ số, trong khi -?\d+(\.\d+)? khớp với số âm tùy chọn và số thập phân. Để cắt khoảng trắng đầu và cuối, khớp ^\s+|\s+$ và thay thế bằng không có gì. Để tìm từ trùng lặp, mẫu tham chiếu ngược \b(\w+)\s+\1\b khớp với một từ theo sau chính nó, trong đó \1 tham chiếu lại nhóm capture đầu tiên.

Cờ thay đổi cách khớp hoạt động
Cờ là các công tắc sửa đổi toàn bộ mẫu. Cờ global (g) tìm mọi kết quả khớp thay vì dừng lại ở kết quả đầu tiên, đó là điều bạn muốn khi làm nổi bật tất cả các lần xuất hiện. Cờ case-insensitive (i) làm cho error khớp với "Error" và "ERROR" như nhau. Cờ multiline (m) thay đổi ^ và $ để chúng khớp ở đầu và cuối mỗi dòng, không chỉ toàn bộ văn bản, điều này thiết yếu cho công việc log theo từng dòng. Các cờ hữu ích khác bao gồm s (dotall, cho phép dấu chấm khớp với ký tự xuống dòng) và u để xử lý Unicode đầy đủ.
Các phương ngữ khác nhau đôi chút theo ngôn ngữ
Regex là một họ phương ngữ, không phải một tiêu chuẩn cố định. JavaScript, Python, PCRE (PHP), Java, .NET, Go và Rust đồng ý về cú pháp cốt lõi ở trên, nhưng chúng phân kỳ ở các cạnh: hỗ trợ lookbehind, cú pháp nhóm được đặt tên ((?<name>...) so với (?P<name>...)), Unicode property escape, và cờ nào tồn tại đều khác nhau. Một mẫu hoạt động trong một engine có thể cần một chỉnh sửa nhỏ trong engine khác, vì vậy đáng để kiểm tra với phương ngữ bạn thực sự triển khai. Khi bạn đã tinh chỉnh xong mẫu, các công cụ lập trình viên và công cụ văn bản khác của chúng tôi có thể giúp với công việc xung quanh là làm sạch, mã hóa và chuyển đổi dữ liệu bạn vừa khớp.
Câu hỏi thường gặp
Văn bản của tôi có được gửi đến server không?
Không. Regex Tester chạy hoàn toàn trong trình duyệt của bạn. Mẫu và văn bản mẫu của bạn ở lại trên thiết bị và không bao giờ được tải lên, vì vậy an toàn khi dán dữ liệu nhạy cảm.
Công cụ này sử dụng phương ngữ regex nào?
Nó sử dụng engine regex JavaScript tích hợp trong trình duyệt của bạn. Cú pháp cốt lõi khớp với những gì bạn biết từ hầu hết các ngôn ngữ, mặc dù một số tính năng nâng cao khác đôi chút so với PCRE, Python hoặc .NET.
Sự khác biệt giữa khớp tham lam và lười biếng là gì?
Theo mặc định, bộ định lượng tham lam và lấy càng nhiều văn bản càng tốt. Thêm dấu chấm hỏi làm chúng lười biếng, vì vậy chúng lấy càng ít càng tốt. Ví dụ, mẫu dấu chấm sao là tham lam trong khi dấu chấm sao dấu chấm hỏi là lười biếng.
Làm thế nào để khớp một ký tự đặc biệt theo nghĩa đen?
Thoát nó bằng dấu gạch chéo ngược. Để khớp một dấu chấm thực sự, hãy viết dấu gạch chéo ngược dấu chấm. Điều tương tự áp dụng cho các ký tự meta khác như dấu ngoặc đơn, dấu ngoặc vuông, dấu cộng và dấu chấm hỏi.
Tại sao mẫu của tôi không khớp gì?
Nguyên nhân phổ biến là thiếu cờ global, các neo gắn kết quả khớp vào vị trí sai, ký tự đặc biệt chưa được thoát, hoặc bộ định lượng tham lam vượt qua ranh giới bạn mong đợi. Kiểm tra từng phần để tìm thủ phạm.
Tôi có thể capture các phần của kết quả khớp không?
Có. Bọc một phần của mẫu trong dấu ngoặc đơn để tạo nhóm capture. Mỗi nhóm được báo cáo riêng, cho phép bạn trích xuất các trường như năm, tháng và ngày từ một ngày tháng.
