Lớp Pattern của gói java.util.regex là biểu diễn đã biên dịch của biểu thức chính quy.
Phương thức compile() của lớp này chấp nhận một giá trị chuỗi đại diện cho regex và trả về đối tượng Pattern:
static Pattern compile(String regex)
Biến thể khác chấp nhận int flag:
static Pattern compile(String regex, int flags)
Lớp Pattern cung cấp các trường (fields) đại diện cho các flag:
| S.No | Trường và Mô tả |
|---|---|
| 1 | CANON_EQ Khớp 2 ký tự chỉ khi canonically equal. |
| 2 | CASE_INSENSITIVE Khớp không phân biệt hoa/thường. |
| 3 | COMMENTS Cho phép khoảng trắng và comment trong pattern. |
| 4 | DOTALL Bật dotall mode: '.' khớp cả line terminator. |
| 5 | LITERAL Phân tích literal: metacharacter không có ý nghĩa đặc biệt. |
| 6 | MULTILINE Bật multiline: ^ $ khớp đầu/cuối mỗi dòng. |
| 7 | UNICODE_CASE Case folding nhận biết Unicode (kết hợp CASE_INSENSITIVE). |
| 8 | UNICODE_CHARACTER_CLASS Bật phiên bản Unicode cho predefined/POSIX char classes. |
| 9 | UNIX_LINES Chế độ dòng Unix: chỉ \n là line terminator. |
Phương thức flags() trả về giá trị int đại diện cho flag(s) đã dùng trong pattern hiện tại (bitwise OR của các flag).
Ví dụ
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class COMMENTES_Example {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Nhập tên: ");
String name = sc.nextLine();
System.out.println("Nhập ngày sinh (MM/DD/YYYY): ");
String dob = sc.nextLine();
String regex = "^(1[0-2]|0[1-9])/ # For Month\n"
+ "(3[01]|[12][0-9]|0[1-9])/ # For Date\n"
+ "[0-9]{4}$ # For Year";
Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS);
Matcher matcher = pattern.matcher(dob);
boolean result = matcher.matches();
if (result) {
System.out.println("Ngày sinh hợp lệ");
} else {
System.out.println("Ngày sinh không hợp lệ");
}
System.out.println("Flag đã dùng (int): " + pattern.flags());
}
}
Kết quả
Nhập tên: Krishna Nhập ngày sinh: 09/26/1989 Ngày sinh hợp lệ Flag đã dùng (int): 4
Giải thích: Giá trị 4 tương ứng với Pattern.COMMENTS (theo thứ tự bit: 1=CANON_EQ, 2=CASE_INSENSITIVE, 4=COMMENTS, 8=DOTALL, 16=MULTILINE, 32=LITERAL, 64=UNICODE_CASE, 128=UNICODE_CHARACTER_CLASS, 256=UNIX_LINES).