------
Phần 71. Biểu
thức chính quy – regular expression
Đây là clip số 62:
Theo wiki, biểu thức chính quy (regular expression, viết tắt
là regexp, regex hay regxp) là một chuỗi miêu tả một bộ các chuỗi khác, theo
những quy tắc cú pháp nhất định. Biểu thức chính quy thường được dùng trong các
trình biên tập văn bản, các tiện ích tìm kiếm và xử lý văn bản dựa trên các mẫu
được quy định. Nhiều ngôn ngữ lập trình cũng hỗ trợ biểu thức chính quy trong
việc xử lý chuỗi, chẳng hạn như Perl có bộ máy mạnh mẽ để xử lý biểu thức chính
quy được xây dựng trực tiếp trong cú pháp của chúng.
Trong lập trình, biểu thức chính quy thường được sử dụng để:
- Kiểm tra tính hợp lệ của các input trong Form
- Xử lý các yêu cầu phức tạp trong chuỗi, ví dụ: bóc tách,
thay đổi nội dung, loại bỏ kí tự
Bước đầu cần hiểu ý nghĩa của các kí hiệu trong biểu thức
chính quy.
Có thể cài đặt chương trình trên máy tính hoặc sử dụng các
trang web để học cách sử dụng biểu thức chính quy.
Ví dụ, sử dụng trang web sau: https://regex101.com/
Biểu thức
|
Ý nghĩa
|
Everything
|
Tìm các chuỗi có giá trị là “Everything”
|
^từ khóa
|
Tìm từ khóa ở đầu chuỗi
|
từ khóa$
|
Tìm từ khóa ở cuối chuỗi
|
\ (^, $, ., /)
|
Để tìm các kí tự đặc biệt, ví dụ (^, $, ., /)
|
.
|
Đại diện cho một kí tự bất kì
|
…
|
Đại diện cho các nhóm gồm 3 chữ cái
|
[]
|
Tập hợp các kí tự có trong dấu ngoặc vuông
|
[aB].
|
Bắt đầu là “a” hoặc “B”, sau đó là một kí tự bất kì
|
[abc][def]
|
Kết quả là (phép phân phối):
“ad ae af”
“bd be bf”
“cd ce cf”
|
-
|
Lấy các kí tự trong một khoảng nào đó, thường dùng với []
Ví dụ: [a-c], tìm các kí tự nằm trong khoảng từ “a” tới
“c”
[2-9], tìm các số từ 2 đến 9
|
[2-4a-c]
|
Tìm các kí tự nằm trong khoảng 2 đến 4 hoặc “a” đến “c”
|
^ đứng trước một kí hiệu hay tập hợp
|
Mang ý nghĩa phủ định của kí hiệu hay tập hợp
Ví dụ: [^a-c], tìm tất cả các kí tự, ngoại trừ các kí tự
nằm trong khoảng từ “a” đến “c”
[^0-9], không lấy số
|
(A|B|C)
|
Chọn “A” hoặc “B” hoặc “C”
Ví dụ: (Mon|Tues|Sun)day, sẽ chọn ra được “Monday”,
“Tuesday” và “Friday”
|
*
|
Xuất hiện 0 hoặc nhiều lần
Ví dụ: a*b, kết quả sẽ gồm a xuất hiện 0 lần, 1 lần, 2
lần…n lần và b. Kết quả là b, ab, aab, aaab…
|
+
|
Xuất hiện 1 hoặc nhiều lần
Ví dụ: a+b, kết quả sẽ gồm a xuất hiện 1 lần, 2 lần…n lần
và b. Kết quả là ab, aab, aaab…
|
?
|
Xuất hiện 0 hoặc 1 lần
Ví dụ: a?b, kết quả sẽ gồm a xuất hiện 0 lần, 1 lần và b.
Kết quả là b, ab.
|
Đây là clip số 63:
Biểu thức
|
Ý nghĩa
|
.*
|
Chọn được cả chuỗi và chuỗi rỗng
|
.+
|
Chọn được cả chuỗi và không bao gồm chuỗi rỗng
|
-A*-
|
Ví dụ về tình huống sử dụng dấu *. Lấy chuỗi bị kẹp đầu và
cuối bởi kí tự -, có cả chuỗi rỗng
|
[-A]*
|
Kết quả sẽ là: rỗng hoặc phép phân phối của các [-A]
|
-A+-
|
Ví dụ về tình huống sử dụng dấu +. Lấy chuỗi bị kẹp đầu và
cuối bởi kí tự -, không có chuỗi rỗng
|
[^ ]+
|
Tìm kí tự không phải là khoảng trắng, xuất hiện 1 hoặc n
lần
|
-A?-
|
Ví dụ về tình huống sử dụng dấu ?. Lấy -- hoặc -A-.
|
.{n}
|
Lấy các chuỗi bất kì, có độ dài là n kí tự.
Lưu ý: “.{4}” tương đương với “….”
|
[a-z]{3,}
|
Lấy các chuỗi kí tự có chiều dài từ 3 trở lên
|
Đây là clip số 64:
Biểu thức
|
Ý nghĩa
|
\w
|
Tương đương với [A-z0-9_]
|
\w*
|
Lấy khoảng trắng và các chuỗi kí tự liền nhau
|
[a-z]\w*
|
Lấy các chuỗi kí tự dạng chữ thường
|
\W
|
Lấy khoảng trắng, dấu “-”, dấu “:”, …
Tương đương với [^A-z0-9_]
|
\s
|
Lấy các khoảng trắng
|
\S
|
Lấy các kí tự khác khoảng trắng
|
\d
|
Lấy các kí số. Tương đương với [0-9]
|
\D
|
Lấy các kí tự không phải là kí số. Tương đương với [^0-9]
|
\A
|
Tìm từ đầu chuỗi nguồn, tương tự dấu ^
|
\Z
|
Tìm từ cuối chuỗi nguồn, tương tự dấu $
|
A+(?=x)
|
Tìm chuỗi gồm A xuất hiện 1 cho tới n lần và kết thúc
chuỗi là kí tự “x”
|
A{3,}(?!x)
|
Tìm chuỗi gồm 3 kí tự “A” và không kết thúc bằng kí tự “x”
|
\bxyz
|
Tìm chuỗi “xyz” bắt đầu từ bên trái
|
\Bxyz
|
Tìm chuỗi “xyz” bắt đầu từ bên phải
|
Đây là clip số 65:
Một số ví dụ áp dụng biểu thức chính quy, tuy nhiên cần tham
khảo thêm trên mạng để có biểu thức chính quy cho các trường hợp tổng quát hơn.
Nên xem đây là các bài tập để hiểu hơn về biểu thức chính quy.
Kiểm tra một địa chỉ email hợp lệ (với các điều kiện sau):
- tên email bắt đầu bằng một kí tự
- tên email gồm các kí tự, kí số, dấu chấm (.), dấu gạch dưới(_)
- tên email có độ dài từ 5 tới 32 kí tự
- tên miền của email có thể là tên miền cấp 1 hoặc cấp 2
Kết quả:
^[a-z][a-z0-9_\.]{4,32}@[a-z0-9]{2,}(\.[a-z0-9]{2,4}){1,2}$
Kiểm tra tên đăng nhập hợp lệ (với các điều kiện sau):
- tên đăng nhập phải bắt đầu bằng một kí tự hoặc dấu gạch
dưới (_)
- các kí tự tiếp theo của tên đăng nhập gồm: kí tự, kí số,
dấu chấm (.), dấu gạch dưới(_), khoảng trắng
- tên đăng nhập có độ dài từ 5 tới 32 kí tự
Kết quả:
^[a-z_][a-z0-9_\.\s]{4,31}$
Kiểm tra một mật khẩu hợp lệ (với các điều kiện sau):
- mật khẩu gồm các kí tự, kí số, dấu chấm (.), dấu gạch
dưới(_), kí tự đặc biệt
- có chiều dài 8 kí tự
- phải chứa ít nhất một kí tự đặc biệt, một kí tự hoa và một
kí số
Biểu thức chính quy (?=.*\d): có nghĩa là “phải tồn tại ít
nhất” một số
Kết quả:
^(?=.*\d)(?=.*\W)(?=.*[A-Z]).{8,8}$
Kiểm tra một URL hợp lệ:
Kết quả:
(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)
-----------
Cập nhật [16/9/2020]
-----------