Bảng tổng hợp Regex — Regex cheatsheet là gì?
Regex, hay biểu thức chính quy, là một mẫu mô tả quy luật ký tự để tìm kiếm hoặc kiểm tra văn bản. Thay vì chỉ tìm một từ cố định, bạn có thể diễn đạt những yêu cầu như “một chữ số”, “một dãy chữ cái” hoặc “nội dung đứng trước một dấu nhất định”. Đây là kiến thức nền về regex, không có nghĩa mọi công cụ mang tên regex đều thực hiện việc kiểm tra văn bản.
Regex cheatsheet là bảng tóm tắt cú pháp giúp người dùng tra nhanh ký hiệu và ý nghĩa. Bảng tổng hợp này hướng đến cú pháp biểu thức chính quy trong JavaScript. Theo dữ liệu được cung cấp, bảng có 37 mục thuộc 7 nhóm: ký tự cơ bản, tập hợp ký tự, định lượng, ranh giới, lookaround, nhóm và các cờ. Đây là tập cú pháp chọn lọc, không phải toàn bộ tính năng regex của JavaScript.
Công cụ hỗ trợ ba nhu cầu: đọc mô tả từng cú pháp, lọc danh sách bằng từ tìm kiếm và yêu cầu sao chép cú pháp của một mục. Kết quả nhận được là các mục tra cứu phù hợp, chứ không phải những đoạn văn bản đã khớp với một biểu thức.
Vì vậy, hãy dùng bảng để hiểu hoặc nhớ lại cách viết mẫu. Phần triển khai được cung cấp không có chức năng chạy mẫu trên chuỗi thử, chuyển đổi sang Python, Bash hay R, hoặc xuất bảng thành PDF.
Có thể nhập gì và đọc kết quả tra cứu như thế nào?
Đầu vào là từ tra cứu, không phải dữ liệu cần kiểm tra
Đầu vào chính là văn bản trong ô tìm kiếm. Bạn có thể nhập một ký hiệu như [0-9], một phần diễn giải tiếng Việt như “khoảng trắng”, hoặc thuật ngữ tiếng Anh như “lookahead”. Mục đích là tìm một mục trong bảng, không phải đưa dữ liệu vào để xem dữ liệu đó có hợp lệ theo regex hay không.
Chẳng hạn, nhập “khoảng trắng” giúp tra những cú pháp có nội dung liên quan trong mô tả hoặc từ khóa hỗ trợ. Nhập một câu cần xử lý không khiến công cụ tự chọn mẫu phù hợp. Tương tự, nhập một biểu thức dài chỉ tạo truy vấn tìm kiếm nguyên văn; công cụ không phân tích biểu thức đó thành các thành phần để giải thích.
Đầu vào này không có đơn vị đo. Phần mã được cung cấp không đặt giới hạn độ dài rõ ràng và không có bước kiểm tra tính hợp lệ của regex. Để tra cứu hiệu quả, nên dùng một ký hiệu hoặc một cụm ngắn gắn với khái niệm đang cần tìm.
Cách hiểu danh sách và nội dung sao chép
Mỗi kết quả gồm nhóm chứa mục, cú pháp và mô tả ý nghĩa. Nhóm giúp bạn nhận biết vai trò của ký hiệu; mô tả giúp hiểu cách dùng ở mức tóm tắt. Việc một mục xuất hiện không chứng minh mẫu bạn đang viết là đúng hoặc môi trường của bạn hỗ trợ nó.
Khi ô tìm kiếm rỗng, toàn bộ bảng được hiển thị. Khi không có mục phù hợp, thông báo không tìm thấy xuất hiện. Nếu yêu cầu sao chép thành công, nội dung được đưa vào clipboard chỉ là cú pháp của mục đã chọn, không kèm mô tả hay cả nhóm.
Các chữ x, y, n, m và name trong một số mục là phần minh họa. Bạn cần hiểu chúng đại diện cho nội dung nào rồi mới thay bằng ký tự, số lần lặp hoặc tên nhóm phù hợp với yêu cầu thực tế.
Năm thuật ngữ regex cần hiểu khi đọc bảng
Các giải thích dưới đây là kiến thức nền để đọc bảng, không phải chức năng thực thi mà công cụ cung cấp. Chúng giúp phân biệt những thành phần nhìn giống nhau nhưng đảm nhiệm vai trò khác nhau trong một mẫu.
Biểu thức chính quy
Biểu thức chính quy là mẫu diễn đạt quy luật của nội dung cần tìm hoặc kiểm tra. Mẫu và văn bản được kiểm tra là hai đối tượng khác nhau: \d+ mô tả một dãy chữ số, còn “Mã 123” có thể là văn bản đem đối chiếu với mẫu ấy. Một biểu thức có thể dùng để tìm phần phù hợp bên trong chuỗi, không nhất thiết kiểm tra toàn bộ chuỗi. Bảng này giúp tra các thành phần của mẫu, nhưng không thực hiện phép đối chiếu đó.
Tập hợp ký tự
Tập hợp ký tự quy định những ký tự được phép, hoặc bị loại, tại một vị trí khớp. Ví dụ, [xyz] chọn một ký tự là x, y hoặc z; nó không yêu cầu ba chữ “xyz” xuất hiện liền nhau. Dạng [^xyz] phủ định lựa chọn ấy. Điểm dễ nhầm là ngoặc vuông không có vai trò giống ngoặc tròn: tập ký tự lựa chọn ở một vị trí, còn nhóm biểu thức gom các thành phần để áp dụng quy tắc chung.
Định lượng
Định lượng quy định số lần xuất hiện của thành phần đứng ngay trước nó, có thể là ký tự, tập ký tự hoặc nhóm. Chẳng hạn, [0-9]{3} mô tả ba chữ số liên tiếp, nhưng tự nó chưa yêu cầu toàn bộ chuỗi chỉ chứa ba chữ số. Dạng tham lam ưu tiên phần khớp dài hơn; dạng lười biếng ưu tiên phần ngắn hơn, trong điều kiện toàn bộ mẫu vẫn thỏa. “Lười biếng” nói về ưu tiên lựa chọn, không phải lời bảo đảm chạy nhanh hơn.
Nhóm bắt
Nhóm bắt gom một phần biểu thức và ghi nhận nội dung phần đó đã khớp, để có thể lấy lại hoặc tham chiếu trong mẫu. Nhóm không bắt cũng gom biểu thức nhưng không tạo kết quả bắt tương ứng. Bảng có cả nhóm bắt, nhóm không bắt, tham chiếu ngược và nhóm có tên. Tên nhóm là nhãn trong biểu thức, không phải dữ liệu do bảng tự tạo. Việc dùng nhóm không bắt không mặc nhiên bảo đảm hiệu suất tốt hơn trong mọi tình huống.
Cờ regex
Cờ regex là tùy chọn thay đổi cách áp dụng mẫu, không phải ký tự cần tìm trong văn bản. Bảng giới thiệu g, i, m và s. Cờ i liên quan đến phân biệt hoa thường; m thay đổi ý nghĩa của neo đầu và cuối đối với từng dòng; s cho phép dấu chấm khớp cả ký tự xuống dòng. Vì vậy, m không thay thế s. Công cụ chỉ trình bày ý nghĩa các cờ, không có chế độ bật chúng để chạy regex.
Bộ lọc tìm kiếm hoạt động theo quy tắc nào?
Tìm chuỗi con trong ba loại nội dung
Bộ lọc kiểm tra xem văn bản bạn nhập có xuất hiện liên tiếp trong ít nhất một trong ba nơi: cú pháp, mô tả hoặc từ khóa hỗ trợ của từng mục. Chỉ cần một nơi phù hợp, mục đó được giữ lại. Đây là tìm chuỗi con thông thường, không phải áp dụng regex vào nội dung bảng.
Do đó, dấu chấm, ngoặc vuông hay dấu cộng trong ô tìm kiếm được xem là văn bản cần tìm. Công cụ không hiểu dấu chấm trong truy vấn là “bất kỳ ký tự nào”. Nó cũng không tách một câu thành nhiều từ độc lập rồi tìm từng từ, không tìm gần đúng và không suy đoán ý định nếu bạn viết sai thuật ngữ.
Hoa thường, dấu tiếng Việt và khoảng trắng
Trước khi đối chiếu, truy vấn và nội dung được chuyển về chữ thường. Cách này thuận tiện khi tìm thuật ngữ, nhưng tạo một hệ quả đáng chú ý: truy vấn \d và \D được xử lý giống nhau. Điều đó chỉ mô tả bộ lọc; trong regex, hai ký hiệu vẫn mang ý nghĩa đối lập.
Bộ lọc không tự bỏ dấu tiếng Việt hoặc cắt khoảng trắng ở đầu và cuối. Một số từ không dấu tìm được nhờ đã có trong từ khóa hỗ trợ, chứ không phải vì công cụ chuyển mọi từ có dấu thành không dấu. Khoảng trắng thừa cũng trở thành một phần của chuỗi cần tìm và có thể làm mất kết quả mong đợi.
Cách hình thành danh sách kết quả
Sau khi lọc từng mục, công cụ chỉ hiển thị nhóm còn ít nhất một mục phù hợp. Tên nhóm không được tìm trực tiếp. Vì thế, một từ trùng với tiêu đề nhóm chỉ có tác dụng nếu nó cũng nằm trong nội dung được đối chiếu của một mục.
Thứ tự nhóm và mục được giữ theo bảng ban đầu, không phải thứ tự đánh giá mức độ liên quan. Truy vấn rỗng phù hợp với mọi mục nên trả lại toàn bộ danh sách; thao tác xóa khôi phục trạng thái này. Nếu tất cả mục bị loại, thông báo không có kết quả được hiển thị. Những quy tắc ấy quyết định mục tra cứu nào xuất hiện, hoàn toàn khác với quy tắc quyết định văn bản nào khớp một regex.
Khi nào nên dùng bảng tra cứu regex?
Tra cứu khi viết hoặc đọc một mẫu
Bảng hữu ích khi bạn đã xác định yêu cầu xử lý văn bản nhưng chưa nhớ ký hiệu cần dùng. Nếu yêu cầu liên quan đến chữ số, khoảng trắng hoặc lựa chọn ký tự, bạn có thể đối chiếu nhóm ký tự cơ bản và tập hợp ký tự. Nếu cần số lần lặp cụ thể, hãy đọc nhóm định lượng thay vì chọn dấu cộng hoặc dấu sao theo cảm tính.
Khi đọc một mẫu có sẵn, bảng giúp nhận diện những phần khó nhớ như tham chiếu ngược, nhóm không bắt hoặc điều kiện phía trước và phía sau. Tuy nhiên, hiểu từng ký hiệu chưa đủ để kết luận cả mẫu làm đúng yêu cầu: vị trí đặt nhóm, định lượng và ranh giới đều ảnh hưởng đến ý nghĩa chung.
Học theo từng nhóm cú pháp
Người mới có thể học theo nhu cầu: bắt đầu với loại ký tự, tiếp đến số lần lặp, rồi xem ranh giới và nhóm. Cách này gắn cú pháp với câu hỏi cụ thể, chẳng hạn “chấp nhận ký tự nào?” hoặc “thành phần này được lặp bao nhiêu lần?”, thay vì cố ghi nhớ toàn bộ bảng cùng lúc.
Với các cờ và lookaround, nên đọc cả điều kiện áp dụng trong môi trường dự định sử dụng. Bảng nằm ở bước hiểu cú pháp; bước thử trên dữ liệu đại diện vẫn cần thực hiện riêng. Bạn có thể tìm hiểu tiếp chủ đề này qua trình kiểm tra biểu thức chính quy, nhưng không nên hiểu rằng hai công cụ tự tích hợp hoặc tự chuyển mẫu cho nhau.
Ví dụ tra cứu và cách hiểu kết quả
Những tình huống sau được suy ra từ dữ liệu và quy tắc trong mã được cung cấp, không phải báo cáo chạy thử. Đầu vào của mỗi ví dụ là văn bản tra cứu, không có đơn vị đo; các số lượng nêu ra là số mục trong bảng.
Tìm một khái niệm bằng từ khóa tiếng Anh
Đầu vào: nhập lookahead. Từ này có trong mô tả hoặc từ khóa hỗ trợ của hai mục điều kiện phía sau. Vì vậy, bộ lọc giữ lại x(?=y) và x(?!y) trong nhóm lookaround.
Kết quả có hai mục để bạn đối chiếu điều kiện có và không có nội dung theo sau. Không có chuỗi thử nào được xử lý trong tình huống này. Bạn chưa biết một mẫu cụ thể sẽ lấy ra đoạn nào, bởi công cụ chỉ tìm thấy hai phần giải thích phù hợp với từ tra cứu.
Tìm hai ký hiệu khác nhau nhưng nhận cùng danh sách
Đầu vào: lần lượt nhập \d và \D. Cả hai truy vấn trở thành cùng một chuỗi sau khi chuyển về chữ thường. Trong dữ liệu hiện có, mỗi lần tìm đều giữ lại hai mục \d và \D.
Cần đọc mô tả để chọn đúng: \d chỉ chữ số từ 0 đến 9, còn \D chỉ ký tự không thuộc phạm vi đó. Danh sách tra cứu giống nhau không biến hai cú pháp thành tương đương. Đây là ví dụ cho thấy cách tìm kiếm và ý nghĩa regex phải được xem xét riêng.
Danh sách đầy đủ, không có kết quả và sao chép
Đầu vào rỗng: mọi mục đều được giữ lại. Số mục của bảy nhóm lần lượt là 7, 5, 8, 4, 5, 4 và 4; tổng là 37 mục. Thông báo không có kết quả được ẩn trong trạng thái này.
Đầu vào zzzzz: chuỗi này không xuất hiện trong ba loại nội dung được đối chiếu của bất kỳ mục nào. Kết quả không còn nhóm được hiển thị và thông báo không tìm thấy được bật. Đây không phải lỗi cú pháp regex.
Sao chép [0-9]: giả định trình duyệt cho phép ghi clipboard, nội dung nhận được là chính [0-9], không kèm mô tả. Sau khi yêu cầu thành công, nút báo đã sao chép trong khoảng 1,2 giây. Phản hồi này xác nhận thao tác sao chép, không xác nhận mẫu phù hợp với dữ liệu của bạn.
Bảng tra cứu khác gì trình kiểm tra regex và tài liệu của từng ngôn ngữ?
Nhớ cú pháp và kiểm tra hành vi là hai việc khác nhau
Bảng tra cứu trả lời câu hỏi “ký hiệu này nghĩa là gì?” hoặc “nên đọc lại thành phần nào?”. Việc kiểm tra regex trả lời câu hỏi khác: “với mẫu, cờ và chuỗi này, điều gì thực sự khớp?”. Để trả lời câu hỏi thứ hai, cần áp dụng biểu thức trong một môi trường thực thi phù hợp.
Ví dụ, biết + chỉ một hoặc nhiều lần xuất hiện chưa giúp xác định mẫu có chấp nhận nội dung ngoài mong muốn hay không. Điều đó còn tùy thành phần đứng trước, các neo và phần còn lại của mẫu. Cách kết hợp hợp lý là tra ý nghĩa, xác nhận điều kiện hỗ trợ, rồi thử dữ liệu đại diện gồm cả trường hợp nên được chấp nhận và nên bị loại.
Không mặc định regex tương thích giữa các ngôn ngữ
Tài liệu của từng ngôn ngữ hoặc hệ thống regex giúp xác định cú pháp, cờ và hành vi được hỗ trợ. Bảng hướng đến JavaScript nên không thay thế tài liệu Python, Bash hay R. Ngay trong môi trường dòng lệnh, chương trình xử lý văn bản và chế độ regex được chọn cũng có thể ảnh hưởng cách diễn giải mẫu.
Tra được tên “lookbehind” hoặc “nhóm có tên” không chứng minh môi trường của bạn chạy được cú pháp đó. Một ký hiệu quen thuộc cũng có thể chịu quy tắc khác về chuỗi, dấu gạch chéo ngược hoặc Unicode. Do đó, hãy kiểm tra tài liệu của đúng môi trường thay vì sao chép nguyên mẫu chỉ vì hai ngôn ngữ cùng dùng khái niệm regex.
Giới hạn và những điểm cần lưu ý trước khi áp dụng
Giới hạn nội dung và cách hiển thị
Bảng không bao quát mọi tính năng regex JavaScript. Mô tả ngắn cũng cần được đọc cùng điều kiện: dấu chấm phụ thuộc cờ s, neo đầu và cuối phụ thuộc cờ m, còn việc lấy nhiều kết quả với g phụ thuộc cách sử dụng biểu thức. Nhóm có tên thuộc cú pháp được bổ sung trong ES2018, không nên mặc định có ở mọi môi trường JavaScript.
Riêng mẫu nhóm có tên có nguy cơ hiển thị thiếu phần tên vì cách nội dung được đưa vào HTML. Đây là vấn đề trình bày có thể xảy ra, không làm thay đổi ý nghĩa của cú pháp (?<name>x). Chưa có xác minh hiển thị thực tế trên từng trình duyệt, nên cần thận trọng nếu ký hiệu nhìn không đầy đủ.
Điều kiện trình duyệt và phạm vi chưa xác minh
Sao chép phụ thuộc khả năng ghi clipboard và quyền của trình duyệt. Thao tác có thể thất bại vì quyền bị từ chối hoặc điều kiện của trang, không chỉ vì trình duyệt thiếu hỗ trợ. Thông báo lỗi trong công cụ không phân biệt các nguyên nhân này.
Phần triển khai được cung cấp không chứng minh có xuất PDF, chuyển đổi ngôn ngữ hoặc chế độ ngoại tuyến. Cũng chưa đủ dữ liệu để kết luận toàn website không gửi, lưu hay theo dõi nội dung tìm kiếm. Khả năng hoạt động thực tế của trang và các thành phần khác chưa được xác minh. Trước khi áp dụng, đặc biệt với cú pháp nâng cao, hãy kiểm tra mẫu trong đúng môi trường sẽ sử dụng.
Câu hỏi thường gặp
Bảng này có kiểm tra regex trên chuỗi mẫu được không?
Không. Phần triển khai được cung cấp chỉ lọc các mục tra cứu và hỗ trợ sao chép cú pháp; không có đầu vào dành cho chuỗi thử hoặc chức năng chạy biểu thức. Nếu nhập dữ liệu cần kiểm tra vào ô tìm kiếm, bạn chỉ đang tìm văn bản đó trong nội dung bảng. Muốn biết mẫu khớp ở đâu, bắt được nội dung gì hoặc có loại đúng trường hợp không hợp lệ hay không, cần thử riêng trong môi trường regex phù hợp.
Vì sao tìm \d và \D lại ra cùng các mục?
Vì bộ lọc chuyển cả truy vấn và nội dung đối chiếu về chữ thường trước khi tìm. Hai truy vấn khác nhau ở chữ hoa và chữ thường vì thế trở nên giống nhau trong bước tra cứu. Tuy nhiên, ý nghĩa regex không được chuyển đổi theo bộ lọc: \d vẫn chỉ chữ số và \D vẫn chỉ ký tự không phải chữ số. Khi danh sách có cả hai, hãy chọn theo mô tả, không dựa vào việc ký hiệu nào đã được gõ vào ô tìm kiếm.
Vì sao một từ khóa tiếng Việt có dấu hoặc có khoảng trắng không cho kết quả mong muốn?
Vì công cụ tìm đúng chuỗi liên tiếp bạn nhập, không tự chuẩn hóa dấu hoặc loại khoảng trắng thừa. Một cách viết không dấu có thể được hỗ trợ sẵn, nhưng không có nghĩa mọi cách viết đều tương đương. Bạn nên thử một cụm ngắn hơn, kiểm tra khoảng trắng đầu cuối hoặc dùng thuật ngữ tiếng Anh quen thuộc. Nếu từ chỉ nằm trong tên nhóm mà không nằm trong nội dung từng mục, truy vấn đó cũng không nhất thiết trả kết quả.
Cần làm gì khi nút sao chép không hoạt động?
Bạn có thể chọn và sao chép thủ công phần cú pháp đang hiển thị, đồng thời kiểm tra quyền clipboard hoặc điều kiện của trình duyệt. Không nên kết luận ngay rằng cú pháp có lỗi: thất bại ở đây thuộc thao tác sao chép, chưa liên quan đến thực thi regex. Công cụ đưa ra một thông báo chung khi yêu cầu clipboard thất bại, nên thông báo đó không xác định được nguyên nhân cụ thể. Với ký hiệu hiển thị có vẻ thiếu, cần đối chiếu lại cú pháp trước khi sử dụng.
Có thể dùng nguyên cú pháp vừa sao chép làm một regex hoàn chỉnh không?
Không phải lúc nào cũng được. Một mục có thể chỉ là thành phần để ghép vào mẫu, hoặc chứa phần minh họa cần thay thế. Chẳng hạn, định lượng cần gắn với thành phần thích hợp; các ký hiệu về số lần lặp cần giá trị cụ thể. Ngay cả [0-9] cũng chỉ mô tả một chữ số tại vị trí khớp, không tự diễn đạt yêu cầu “toàn bộ dữ liệu là số”. Bạn cần xác định phạm vi kiểm tra, cờ và điều kiện biên trước khi dùng.
Các cú pháp trong bảng có dùng nguyên trạng cho Python, Bash hoặc R được không?
Không nên mặc định như vậy. Có những thành phần phổ biến giữa nhiều hệ thống regex, nhưng cú pháp nâng cao, cách viết nhóm, cờ và quy tắc xử lý chuỗi có thể khác nhau. Với Bash, công cụ hoặc ngữ cảnh dùng regex cũng cần được xác định rõ. Bảng này không có chức năng chuyển đổi giữa các ngôn ngữ. Hãy đối chiếu tài liệu của môi trường đích và thử dữ liệu đại diện trước khi coi mẫu sao chép là dùng được nguyên trạng.
Công cụ có chức năng tải bảng regex thành PDF không?
Không có chức năng tải PDF trong phần mã được cung cấp. Những thao tác được xác nhận là hiển thị bảng, lọc theo truy vấn, xóa truy vấn và yêu cầu sao chép từng cú pháp. Từ khóa liên quan đến PDF không phải bằng chứng cho một tính năng xuất tệp. Nếu trình duyệt có tùy chọn in hoặc lưu trang thành PDF, đó là khả năng riêng của trình duyệt, không phải chức năng xuất được xác nhận của công cụ, và bố cục bản in chưa được xác minh.


17 bình luận
Huỳnh Ngọc Thắng
Có phân biệt regex trong JavaScript với Python không nhỉ? Mình sợ cùng một mẫu mà sang ngôn ngữ khác lại không chạy.
Ngô Đức Mai
tool ngon nha, luu lai de mai lam bai tap regex, khoi phai nho het ky hieu.
Phan Bảo Trung
Nếu có chế độ tối thì tuyệt, tối ngồi code mở nền sáng hơi chói mắt.
Lê Hoài Thủy
cong cu IPv6 ULA generator o muc tuong tu dung de tao dia chi mang noi bo phai ko? minh hoi ngoai le chut.
Vũ Văn Thủy
Mình muốn tìm regex cho email thì nên gõ “email” hay nhập một mẫu có sẵn để tra cứu vậy?
Bùi Quốc Hương
Khá thích kiểu gom nhiều cheatsheet và tiện ích vào cùng một website. Riêng bảng Regex thì mình sẽ quay lại dùng thường xuyên.
Phạm Hữu Nga
Làm sao để biết kết quả tra cứu đang nói về ký tự thông thường hay ký tự đặc biệt cần escape vậy ạ?
Đặng Thị Anh
Cho mình hỏi ô tra cứu có thể nhập cả biểu thức regex hay chỉ nhập từ khóa cần tìm thôi?
Vũ Quốc Nhung
Mong có ví dụ cho lookahead và lookbehind, hai phần này mình đọc tài liệu hoài mà vẫn dễ nhầm.
Đặng Xuân Hà
Ước gì mỗi ký hiệu có thêm một ví dụ khớp và một ví dụ không khớp, nhìn vậy sẽ dễ nhớ hơn.
Vũ Hải Nhung
Regex đúng là nhìn như mật mã luôn á, nhưng có bảng tra bên cạnh thì thấy đỡ rén hơn hẳn 😂
Vũ Hữu Khánh
Đang viết validate form mà quên cú pháp nhóm ký tự, mở bảng này ra cứu nguy luôn :))
Lê Gia Phúc
Phần “Regex cheatsheet là gì?” giải thích dễ hiểu, người mới như mình đọc không bị ngợp thuật ngữ.
Vũ Văn Tú
minh hay nham giua * va +, co bang tong hop nay tra lai nhanh hon han.
Ngô Thu Kiên
Giao diện dễ nhìn đó, nếu có nút sao chép từng mẫu regex thì sẽ tiện hơn nhiều.
Ngô Hải Khánh
Mình mới học Regular Expressions, nên bắt đầu đọc mục nào để hiểu các ký hiệu cơ bản vậy mọi người?
Lý Tiến Anh
Bảng tra cứu Regex này khá tiện, mình hay quên mấy ký hiệu nên có chỗ mở ra xem nhanh là đỡ mất công tìm Google.