Biểu thức chính quy (Regex)
1. Kiểm tra chuỗi khớp mẫu với matches
Phần tiêu đề “1. Kiểm tra chuỗi khớp mẫu với matches”Cách đơn giản nhất để dùng regex trong Java là gọi trực tiếp String.matches():
boolean isValid = email.matches("^[\\w.-]+@[\\w.-]+\\.[a-zA-Z]{2,}$");
System.out.println(isValid); // true⚠️ Trong Java, dấu \ trong chuỗi phải viết thành \\ (vì \ cũng là ký tự escape của chuỗi Java) - ví dụ regex \d+ (một hay nhiều chữ số) phải viết là "\\d+".
2. Các ký hiệu regex phổ biến
Phần tiêu đề “2. Các ký hiệu regex phổ biến”| Ký hiệu | Ý nghĩa |
|---|---|
\d |
một chữ số (0-9) |
\w |
một ký tự chữ/số/gạch dưới |
\s |
một khoảng trắng |
. |
bất kỳ ký tự nào |
+ |
một hoặc nhiều lần |
* |
không hoặc nhiều lần |
? |
không hoặc một lần |
{n,m} |
từ n đến m lần |
^ / $ |
đầu / cuối chuỗi |
[abc] |
một trong các ký tự a, b, c |
System.out.println("12345".matches("\\d+")); // true - toàn sốSystem.out.println("abc123".matches("\\d+")); // false - có chữ cáiSystem.out.println("2026-09-17".matches("\\d{4}-\\d{2}-\\d{2}")); // true - đúng định dạng ngày3. Pattern và Matcher - khi cần dùng lại nhiều lần
Phần tiêu đề “3. Pattern và Matcher - khi cần dùng lại nhiều lần”Khi cần kiểm tra cùng một mẫu regex nhiều lần (ví dụ trong vòng lặp), nên biên dịch Pattern một lần và tái sử dụng, thay vì gọi matches() (biên dịch lại regex mỗi lần gọi):
import java.util.regex.Matcher;import java.util.regex.Pattern;
Pattern pattern = Pattern.compile("\\d+"); // biên dịch một lần
String text = "Có 3 con mèo và 7 con chó";Matcher matcher = pattern.matcher(text);
while (matcher.find()) { System.out.println(matcher.group()); // "3", rồi "7"}4. Thay thế theo mẫu: replaceAll
Phần tiêu đề “4. Thay thế theo mẫu: replaceAll”String text = "Số điện thoại: 0901-234-567";String digitsOnly = text.replaceAll("\\D", ""); // \D = không phải chữ số -> xóa hết
System.out.println(digitsOnly); // 09012345675. Tách chuỗi theo regex: split
Phần tiêu đề “5. Tách chuỗi theo regex: split”String.split() cũng nhận một biểu thức chính quy, không chỉ chuỗi cố định:
String text = "one, two, three,four"; // dấu phẩy và số khoảng trắng không đều nhauString[] parts = text.split(",\\s*"); // tách theo dấu phẩy, cho phép 0 hoặc nhiều khoảng trắng sau
System.out.println(Arrays.toString(parts)); // [one, two, three, four]Tổng kết
Phần tiêu đề “Tổng kết”String.matches()để kiểm tra nhanh chuỗi có khớp mẫu regex hay không- Nhớ escape dấu
\thành\\trong chuỗi Java khi viết regex Pattern.compile()+Matcherhiệu quả hơn khi cần dùng lại cùng một mẫu nhiều lầnreplaceAll()vàsplit()cũng nhận biểu thức chính quy làm tham số