Ngu ngơ học làm web (71) Biểu thức chính quy - regular expression

Tiếp theo của: Ngu ngơ học làm web (70) - Bài tập về thời gian 2
------

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]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web