Lớp Pattern của gói java.regex là biểu diễn đã biên dịch của một biểu thức chính quy.
Phương thức compile() của lớp này nhận một giá trị chuỗi đại diện cho biểu thức chính quy và trả về một đối tượng Pattern.
Ví dụ 1
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CompileExample {
public static void main(String args[]) {
// Đọc giá trị chuỗi
Scanner sc = new Scanner(System.in);
System.out.println("Nhập chuỗi đầu vào");
String input = sc.nextLine();
// Biểu thức chính quy để tìm chữ số
String regex = "(\\d)";
// Biên dịch biểu thức chính quy
Pattern pattern = Pattern.compile(regex);
// In biểu thức chính quy đã biên dịch
System.out.println("Biểu thức chính quy đã biên dịch: " + pattern.toString());
// Lấy đối tượng matcher
Matcher matcher = pattern.matcher(input);
// Kiểm tra xem có khớp không
if (matcher.find()) {
System.out.println("Chuỗi đã cho chứa chữ số");
} else {
System.out.println("Chuỗi đã cho không chứa chữ số");
}
}
}
Kết quả
Nhập chuỗi đầu vào hello my id is 1120KKA Biểu thức chính quy đã biên dịch: (\d) Chuỗi đã cho chứa chữ số
Một biến thể khác của phương thức này chấp nhận một giá trị nguyên đại diện cho các cờ (flags), nơi mỗi cờ chỉ định một điều kiện tùy chọn, ví dụ: CASE_INSENSITIVE bỏ qua chữ hoa/thường khi biên dịch biểu thức chính quy.
Ví dụ 2 (với flag)
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CompileExample {
public static void main(String args[]) {
// Biên dịch biểu thức chính quy với flag
Pattern pattern = Pattern.compile("[t]", Pattern.CASE_INSENSITIVE);
// Lấy đối tượng matcher
Matcher matcher = pattern.matcher("Tutorialspoint");
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("Số lần khớp: " + count);
}
}
Kết quả
Số lần khớp: 3