Học regex một cách dễ dàng (P1)

Biểu thức chính quy (Regular expression viết tắt là: regex, regexp hay regxp) là một nhóm các ký tự hoặc ký hiệu được sử dụng để tìm một mẫu cụ thể từ một văn bản, là một khuôn mẫu được khớp với chuỗi các từ, từ trái sang phải. Biểu thức chính quy được sử dụng để thay thế một văn bản trong một chuỗi, xác thực mẫu, trích xuất một chuỗi con từ một chuỗi dựa trên khớp mẫu và hơn thế nữa. Trong một lần tìm kiếm trên github thì mình thấy một repository khá hay về regex nên trong bài viết lần này mình muốn chia sẻ với các bạn. Bắt đầu nào 😄

Basic Matchers

  • Biểu thức chính quy chỉ là một mẫu các ký tự mà chúng ta sử dụng để thực hiện tìm kiếm trong văn bản. Ví dụ, biểu thức chính quy "Viblo":

    Viblo => Viblo is the awesome platform.

    Test biểu thức chính quy
  • Biểu thức chính quy khớp với chuỗi đầu vào bằng cách so sánh từng ký tự trong biểu thức chính quy với từng ký tự trong chuỗi đầu vào, lần lượt từng ký tự. Biểu thức chính quy thường phân biệt chữ hoa chữ thường nên biểu thức chính quy "Viblo" sẽ không khớp với chuỗi "viblo"
    Viblo => Viblo is the awesome platform, viblo.
    Test biểu thức chính quy

Meta Characters

Meta Characters là các khối xây dựng của các biểu thức chính quy. Các ký tự meta không biểu diễn chính nó mà thay vào đó được diễn giải theo một cách đặc biệt nào đó. Một số ký tự meta có ý nghĩa đặc biệt và được viết bên trong dấu ngoặc vuông. Các ký tự meta như sau:

Full Stop (.)

Full stop . là ví dụ đơn giản nhất về ký tự meta. Kí tự meta . khớp với bất kì kí tự nào. Nó sẽ không khớp kí tự trả về (return) hoặc xuống dòng (newline)
Ví dụ: .o có nghĩa là: bất kỳ kí tự nào và phía sau kí tự đó là o
.o => Viblo is the awesome platform, viblo.
Test biểu thức chính quy

Character set ([])

Dấu ngoặc vuông được sử dụng để chỉ định bộ ký tự (Character set). Sử dụng dấu gạch nối bên trong bộ ký tự để chỉ định phạm vi của các ký tự. Thứ tự của phạm vi ký tự trong dấu ngoặc vuông không quan trọng.
Ví dụ: biểu thức chính quy [Vv]iblo có nghĩa là: chữ hoa V hoặc chữ thường v, theo sau là iblo

[Vv]iblo => Viblo is the awesome platform, viblo.
Test biểu thức chính quy

Negated character set (^)

Biểu tượng dấu mũ biểu diễn sự bắt đầu của chuỗi, nhưng khi nó ở trong dấu ngoặc vuông, nó sẽ phủ định bộ ký tự.
Ví dụ: biểu thức chính quy [^l]o có nghĩa là: bất kỳ ký tự nào ngoại trừ l, theo sau là ký tự o
[^l]o => Viblo is the awesome platform, viblo.
Test biểu thức chính quy

The Star (*)

Biểu tượng * khớp 0 hoặc nhiều lần lặp lại của biểu thức trước. Biểu thức chính quy a* có nghĩa là: 0 hoặc nhiều lần lặp lại ký tự chữ thường trước a. Nhưng nếu nó xuất hiện sau một bộ ký tự thì nó sẽ tìm thấy sự lặp lại của toàn bộ bộ ký tự. Ví dụ: biểu thức chính quy [a-z]* có nghĩa là: bất kỳ số lượng chữ cái viết thường trong một hàng.
[a-z]* => Viblo is the awesome platform, viblo.
Test biểu thức chính quy
Ký tự * có thể được sử dụng với ký tự meta, để khớp với bất kỳ chuỗi ký tự nào .* . Ký tự * có thể được sử dụng với ký tự khoảng trắng \s để khớp với một chuỗi các ký tự khoảng trắng.
\s*the\s => Viblo is the awesome platform, viblo.
Test biểu thức chính quy

The Plus (+)

Biểu tượng + khớp với một hoặc nhiều lần lặp lại của ký tự trước.
Ví dụ: Biểu thức o.+t có nghĩa là biểu thức sẽ lấy bắt đầu từ kí tự o đầu tiên và các kí tự tiếp theo đến chữ t cuối cùng trong câu
o.+t => Viblo is the awesome platform, viblo.
Test biểu thức chính quy

The Question Mark (?)

Trong biểu thức chính quy các ký tự ? làm cho ký tự trước là một tùy chọn.
Ví dụ: [V]?iblo có nghĩa là tùy chọn chữ V, theo sau là iblo
[V]iblo => Viblo is the awesome platform, viblo.
Test biểu thức chính quy
[V]?iblo => Viblo is the awesome platform, viblo.
Test biểu thức chính quy

Braces

Trong các dấu ngoặc nhọn thông thường còn được gọi là bộ định lượng được sử dụng để chỉ định số lần mà một ký tự hoặc một nhóm ký tự có thể được lặp lại. Ví dụ: biểu thức chính quy [0-9]{2,3} có nghĩa là: ghép ít nhất 2 chữ số nhưng không quá 3 (ký tự trong phạm vi từ 0 đến 9).
[0-9]{2,3} => The number was 9.9997 but we rounded it off to 10.0.
Test biểu thức chính quy

Chúng ta có thể bỏ qua số thứ hai. Ví dụ: biểu thức chính quy [0-9]{2,} có nghĩa là: Ghép 2 chữ số trở lên. Nếu chúng tôi cũng xóa dấu phẩy, biểu thức chính quy [0-9]{3} có nghĩa là: Ghép chính xác 3 chữ số.
[0-9]{2,} => The number was 9.9997 but we rounded it off to 10.0.
Test biểu thức chính quy

Capturing Group ()

Capturing Group là một nhóm các mẫu con được viết bên trong dấu ngoặc đơn (...). Chúng ta đặt bộ biểu thức sau một nhóm capturing thì nó lặp lại toàn bộ nhóm capturing.
Ví dụ: biểu thức chính quy (ab)* khớp với 0 hoặc nhiều lần lặp lại của ký tự ab.
Chúng ta cũng có thể sử dụng luân phiên | kí tự meta trong nhóm capturing.
Ví dụ: biểu thức chính quy (l|s|f)o có nghĩa là: ký tự chữ thường l, g hoặc f, theo sau là ký tự o
(l|s|f)o => Viblo is the awesome platform, viblo.
Test biểu thức chính quy

Dollar ($)

Biểu tượng $ được sử dụng để kiểm tra xem ký tự khớp có phải là ký tự cuối cùng của chuỗi đầu vào không.
Ví dụ: biểu thức chính quy (lo\.)$ có nghĩa là: ký tự chữ thường l, theo sau là ký tự chữ thường o, theo sau là ký tự . và bộ biểu thức phải là cuối chuỗi
(lo\.)$ => Viblo. is the awesome platform, viblo.
Test biểu thức chính quy

Lời kết

Trong bài viết này thì mình đã giới thiệu đến các bạn các charater cơ bản của regex trong phần tiếp theo một số character set khác nữa. Cảm ơn các bạn đã theo dõi bài viết ❤️