Regex trong tìm và thay thế: hướng dẫn dễ hiểu kèm bảy công thức
Biểu thức chính quy, hay regex, là một mẫu được viết bằng vài ký hiệu. Trong công cụ [[tool:find-and-replace]], bật Regex và ô Tìm sẽ đọc mẫu thay vì chữ thông thường, nên dấu chấm có nghĩa là một ký tự bất kỳ chứ không phải dấu chấm. Hầu hết mẫu hữu ích chỉ cần một số ít ký hiệu. Với những từ thông thường, hãy tắt Regex, vì khi đó mọi ký hiệu đều được hiểu theo nghĩa đen.
Các ký hiệu bạn cần
| Ký hiệu | Khớp với |
|---|---|
| . | một ký tự bất kỳ, trừ ký tự xuống dòng |
| * | mục đứng trước, không hoặc nhiều lần |
| + | mục đứng trước, một hoặc nhiều lần |
| ? | mục đứng trước, một lần hoặc không có |
| [ ] | một ký tự trong danh sách, chẳng hạn [aeiou] hoặc [0-9] |
| \d \w \s | một chữ số; một chữ cái, chữ số hoặc dấu gạch dưới; một khoảng trắng, tab hoặc ký tự xuống dòng |
| ( ) | một nhóm, mà phần Thay thế có thể dùng lại dưới dạng $1, $2 và cứ thế |
| ^ và $ | đầu và cuối của toàn bộ văn bản |
Chữ in hoa đảo ngược nhóm ký tự: \D là mọi ký tự không phải chữ số và \S là mọi ký tự không phải khoảng trắng.
Có hai lưu ý với công cụ này. Thứ nhất, \w chỉ khớp với chữ cái, chữ số và dấu gạch dưới trong bảng chữ cái Latinh tiếng Anh. Với chữ có dấu, hãy dùng \p{L}, khớp với một chữ cái thuộc bảng chữ cái nào cũng được. Thứ hai, ^ và $ khớp với đầu và cuối của toàn bộ văn bản, không phải của từng dòng. Các công thức dưới đây dùng ký tự xuống dòng bên trong mẫu thay cho cách đó.
Nhóm và $1
Đặt một phần của mẫu trong dấu ngoặc đơn, công cụ sẽ ghi nhớ phần đó đã khớp với gì. Trong ô Thay thế, $1 là nhóm thứ nhất, $2 là nhóm thứ hai, còn $& là toàn bộ phần khớp. Phần FAQ của chính công cụ có một ví dụ kinh điển: khi ô Tìm là (\w+)@(\w+) và ô Thay thế là $2 tại $1, văn bản name@site sẽ thành site tại name. Nhóm chỉ hoạt động khi Regex được bật. Khi tắt, $1 được giữ nguyên như đã gõ.
Xây dựng mẫu từng bước
Bắt đầu với đúng đoạn văn bản bạn muốn tìm, rồi thay các phần thay đổi bằng ký hiệu. Một ngày như 2026-11-04 có thể viết là \d{4}-\d{2}-\d{2}, trong đó {4} nghĩa là đúng bốn mục đứng trước. Hãy thử phiên bản đơn giản trước, và chỉ thu hẹp khi phần tô sáng cho thấy mẫu bắt quá nhiều.
Nếu muốn xem một mẫu hoạt động ra sao mà không thay đổi gì, công cụ kiểm tra regex chạy mẫu trên một đoạn văn mẫu và liệt kê từng kết quả khớp.
Bảy công thức
Bật Regex cho mỗi công thức. Công cụ tô sáng các kết quả khớp và hiển thị số lượng trước khi bạn sao chép, nên hãy thử từng công thức trên một bản sao của văn bản trước.
- Đổi chỗ họ và tên. Tìm
(\w+) (\w+), Thay thế$2, $1. "Ada Lovelace" thành "Lovelace, Ada". Với tên có dấu, dùng(\p{L}+) (\p{L}+). Công thức này chỉ xử lý tên gồm hai từ. - Xóa khoảng trắng cuối dòng. Tìm
[ \t]+(?=\r?\n|$), để trống ô Thay thế. Nó khớp với khoảng trắng hoặc tab nằm ngay trước ký tự xuống dòng hoặc cuối văn bản. Cấu trúc(?=...)kiểm tra có ký tự xuống dòng mà không xóa nó, còn\r?xử lý kiểu xuống dòng của Windows. Sửa văn bản dán vào có tùy chọn Cắt từng dòng làm việc tương tự. - Gộp khoảng trắng kép. Tìm
{2,}, tức là một khoảng trắng lặp lại hai lần trở lên, rồi Thay thế bằng một khoảng trắng. Hai khoảng trắng trở lên sẽ thành một. Công thức này cũng làm thụt đầu dòng ngắn lại, nên đừng dùng cho mã nguồn. - Thêm tiền tố vào mọi dòng. Tìm
(.+), Thay thế- $1. Mỗi chuỗi từ một ký tự trở lên nằm giữa hai ký tự xuống dòng là một dòng, và $1 giữ nội dung dòng đó. Dòng trống được bỏ qua. Hãy dùng dạng một-hoặc-nhiều là.+, không dùng dạng không-hoặc-nhiều, vì dạng sau cũng khớp các vị trí trống giữa hai ký tự xuống dòng, khiến dòng trống bị thêm một dấu gạch ngang thừa. - Xóa dòng trống. Tìm
\n\s*(?=\n), để trống ô Thay thế. Kết quả khớp là một ký tự xuống dòng cùng mọi khoảng trắng theo sau nó, cho đến ký tự xuống dòng tiếp theo, và ký tự xuống dòng tiếp theo đó được giữ lại. Cách này xóa dòng trống, kể cả những dòng chỉ có khoảng trắng. Vì\scũng khớp với ký tự xuống đầu dòng (carriage return), kiểu xuống dòng của Windows cũng hoạt động. Dòng trống ở đầu văn bản vẫn được giữ lại. Công cụ xóa dòng trùng lặp có tùy chọn Bỏ dòng trống làm việc tương tự chỉ với một lần nhấp. - Mỗi mục một dòng. Tìm
,[ ]*, Thay thế\n, và đánh dấu Đọc \n và \t trong Thay thế. "apples, pears, plums" sẽ thành ba dòng. Nếu không đánh dấu, \n vẫn giữ nguyên là hai ký tự gạch chéo ngược và n. - Đặt từng số vào ngoặc vuông. Tìm
\d+, Thay thế[$&]. "Order 42 and 7" thành "Order [42] and [7]". $& là toàn bộ phần khớp, nên không cần nhóm.
Kiểm tra trước khi sao chép
- Số lượng kết quả khớp và phần tô sáng cho thấy mẫu đã bắt được gì. Nếu phần tô sáng sai thì kết quả cũng sai.
- Mẫu bị lỗi sẽ hiện "Mẫu không hợp lệ" bên dưới các ô nhập. Sửa mẫu, kết quả sẽ tự cập nhật.
- Để trống ô Thay thế để xóa mọi kết quả khớp. Chữ gợi ý trong ô sẽ cho biết điều này.
- Phân biệt hoa thường mặc định là tắt, nên các công thức khớp cả chữ hoa lẫn chữ thường. Hãy bật lên khi việc viết hoa quan trọng.
- Để tìm dấu chấm hoặc dấu ngoặc theo nghĩa đen khi Regex đang bật, thêm dấu gạch chéo ngược phía trước: \. hoặc \[.
Các trường hợp đặc biệt
- Khớp tham lam.
.+lấy càng nhiều càng tốt. Để dừng ở lần khớp đầu tiên, thêm dấu hỏi:.+?. Điều này quan trọng với văn bản như<b>.+</b>, vì mẫu này có thể kéo dài qua nhiều thẻ. - Nguyên từ. Với một từ đơn giản, tắt Regex sẽ an toàn hơn. Tùy chọn Chỉ khớp nguyên từ ngăn cat khớp bên trong category, như phần FAQ của công cụ giải thích. Hướng dẫn tìm và thay thế có thêm ví dụ về thay đổi theo nguyên từ.
- Giữ bản gốc. Kết quả hiển thị trong ô riêng, còn văn bản đầu vào được giữ nguyên. Khi hài lòng, hãy sao chép kết quả ra.
Được dịch từ Bản tiếng Anh với sự hỗ trợ của AI.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.


