Regex cơ bản

2024-02-17

regex là gì

search pattern

cho câu hello i am Long. cần tìm kiếm xem câu có chứa một mẫu từ (pattern) cho trước. hay nói đúng là pattern có match với câu hay không (pattern có trước, câu cần check có sau)

new pattern("hello").match("hello i am Long")

code

Pattern pattern = Pattern.compile("hello", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("hello i am Long");
boolean matchFound = matcher.find();

quy tắc cơ bản

kí hiệu ý nghĩa
^ $ vị trí(đầu, cuối chuỗi)
* + ? {} số lượng
| [] hoặc
\d \w \s . loại kí tự (in hoa, số, ..)
() phân nhóm

ví dụ (chat gpt)

pattern kiểm tra xem chuỗi có phải là một domain: ^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$

  • ^: Đây là ký tự mở đầu, chỉ định rằng mẫu phải bắt đầu từ đầu chuỗi.
  • ((?!-)[A-Za-z0-9-]{1,63}(?<!-)\.)+: Đây là một nhóm lặp lại được lặp lại một hoặc nhiều lần, đại diện cho các mức domain trong tên miền. Chi tiết như sau:
    • (?!-): Kiểm tra phần trước không thể kết thúc bằng dấu gạch ngang.
    • [A-Za-z0-9-]{1,63}: Cho phép các ký tự chữ cái, số và dấu gạch ngang, với độ dài từ 1 đến 63 ký tự.
    • (?<!-): Kiểm tra phần sau không thể bắt đầu bằng dấu gạch ngang.
    • \.: Đây là cú pháp để đại diện cho dấu chấm (.). Trong biểu thức chính quy, bạn cần sử dụng \ để thể hiện ký tự \, vì \ là ký tự đặc biệt trong các biểu thức chính quy.
    • [A-Za-z]{2,6}: Đại diện cho phần cuối cùng của tên miền, nơi chỉ chứa các ký tự chữ cái và có độ dài từ 2 đến 6 ký tự.
  • $: Ký tự kết thúc, chỉ định rằng mẫu phải kết thúc ở đây.