Biểu thức chính quy là một nhóm các ký tự được sử dụng để tìm ra một mẫu cụ thể bất kỳ trong một hoặc một vài câu hoặc đoạn văn bản. You can call them is biểu thức đại diện
also been. Đứng về khía cạnh là một nhà phát triển thì regular expression
có thể được coi là một công cụ rất là mạnh trong việc thiết lập chương trình, bạn chắc chắn đã từng phải sử dụng chúng trong chương trình của bạn, ví dụ như chức năng tìm kiếm hoặc có thể thay thế biểu thức, . Các ứng dụng khác nhau và lập trình ngôn ngữ sẽ có những triển khai cho biểu thức regex một cách khác nhau, nhưng về mặt ý tưởng, về mặt khái niệm thì chúng giống nhau. Trong bài viết này mình sẽ dùng ngôn ngữ PHP để giải thích và lấy ví dụ để các bạn hiểu thêm về Regex nhé
Nội dung chính Hiển thị
- 1 Biểu thức chính quy là gì ?
- 2. ví dụ cơ bản
- 3. Siêu nhân vật
- 3. 1 Khớp với một ký tự bất kỳ
- 3. 2 Bộ ký tự
- 3. 2. 1 bộ ký tự phủ định
- 3. 3 lần lặp lại
- 3. 4 niềng răng {}
- 3. 5 Thu thập giá trị
- 3. 6 luân phiên
- 3. 7 ký tự đặc biệt
- 3. 8 neo ^, $
- 3. 8. 1 mỏ neo ^
- 3. 8. 2 neo $
- 4. Bộ tốc ký và ký tự
- 5. Nhìn xung quanh
- 5. 1 Cái nhìn tích cực [?=]
- 5. 2 Nhìn trước tiêu cực [?. ]
- 5. 3 Cái Nhìn Tích Cực
- 5. 4 Cái nhìn tiêu cực
- 6. 1 Trường hợp chuyên sâu [i]
- 6. 2 Tìm kiếm toàn cầu [g]
- 6. 3 Đa tuyến [m]
- 7. Kết luận
- 8. Tham khảo
1 Biểu thức chính quy là gì ?
Biểu thức chính quy
là một chuỗi mô tả một bộ các chuỗi khác, theo các quy tắc cú pháp nhất định từ trái sang phải. Regular Expression
là cách nói đầy đủ của biểu thức chính quy, nhưng bạn sẽ thấy các bài viết khác mà bạn tìm thấy trên google viết tắt là regex
hoặc regexp
. Biểu thức chính quy được sử dụng để thay thế một đoạn văn bản trong một chuỗi dài, xác thực biểu mẫu, lấy một chuỗi nhỏ trong một chuỗi lớn bên dưới vào mẫu mà chúng ta định nghĩa ra, và còn rất nhiều trường hợp khác mà bạn có thể
Hãy tưởng tượng rằng bạn đang viết một chương trình và bạn muốn đặt ra những quy tắc cho hệ thống khi người dùng lựa chọn tên người dùng. Bạn muốn cho phép người dùng chứa những chữ cái, những con số, bọc dưới [], hay là dấu gạch ngang [-]. Bạn cũng muốn giới hạn số lượng các ký tự trong tên người dùng. Bạn sử dụng biểu thức chính quy bên dưới để xác thực theo yêu cầu vừa đặt ra nhé
^[a-z-9_-]{3,15}$
^
. các ký tự bắt đầu một chuỗi- ________số 8. chỗ này có thể hiện là cho phép lấy chữ cái, các con số, dầu gạch dưới, dấu gạch ngang
- {3,15}`. giới hạn chuỗi từ 3 đến 15 ký tự
$
. end string character
Biểu thức chính quy ở trên có thể chấp nhận các chuỗi sau. biểu thức đại diện
0, biểu thức đại diện
1, và biểu thức đại diện
2. Nó không khớp với chuỗi biểu thức đại diện
3 bởi vì nó không có ký tự viết hoa và nó không nằm trong khoảng từ 3 đến 15 ký tự
2. ví dụ cơ bản
Biểu thức chính quy là một mẫu các ký tự mà bạn có thể sử dụng để thực hiện tìm kiếm trong một đoạn văn bản. Ví dụ, biểu thức chính quy biểu thức đại diện
4 tức là nó sẽ tìm thấy trong một đoạn văn bản bắt đầu bằng biểu thức đại diện
5, tiếp đến là biểu thức đại diện
6 và tiếp đến là cuối cùng là biểu thức đại diện
7
Hoàng => Nguyễn Minh Hoàng
Biểu thức chính quy biểu thức đại diện
8 khớp với chuỗi biểu thức đại diện
8. Biểu thức chính quy so 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 mỗi ký tự trong chuỗi đầu vào, lần giống như từng ký tự một. Biểu thức chính quy thường phân biệt những chữ thường, nếu như ta so khớp với chuỗi regular expression
0 trong chuỗi bên trên thì chắc chắn rằng nó sẽ không khớp như vậy
Hoàng => Nguyễn Hoàng Minh Hoàng
3. Siêu nhân vật
Meta Character ở đây tôi muốn nói là thay vì các bạn cố định biểu thức chính quy cụ thể như regular expression
1, các bạn còn có thể lấy bao nhiêu hơn nữa bằng cách sử dụng khối biểu thức chính quy. Ở dưới đây là bảng giải thích khối biểu thức chính quy
regular expression
2 để không bị nhầm lẫn giữa cú pháp và ký tự cần khớp^Bắt đầu đầu vào$Match đến cuối đầu vào3. 1 Khớp với một ký tự bất kỳ
Trong biểu thức chính quy khi chúng ta sử dụng các ký tự regular expression
3 là ví dụ đơn giản nhất cho việc chúng ta khớp với nhiều ký tự trong đầu vào chuỗi. regular expression
3 trong biểu thức chính quy có nghĩa khớp với các ký tự đơn. Nó sẽ không khớp với các ký tự xuống dòng regular expression
5. Ví dụ, bạn có biểu thức chính quy là regular expression
6 tức là nó sẽ khớp với chuỗi đầu vào bất kỳ ký tự nào trong chuỗi bắt đầu bằng bất kỳ ký tự nào nhưng sau đó phải là biểu thức đại diện
6
g => vỡ nguyến nguyện
3. 2 Bộ ký tự
Bộ ký tự được gọi là nhóm các ký tự. Các cặp khung được sử dụng để chỉ ra các ký tự nào được so khớp. Thứ tự so khớp của các ký tự trong cặp dấu ngoặc kép này mà bạn không cần quan tâm. Ví dụ, ta có cơn thức chính quy như sau
[Nn]guyen => Nguyễn Nguyễn Minh Hoàng
và [. ] => Day la dau cham het
3. 2. 1 bộ ký tự phủ định
Như ta đã biết các ký tự ^
là ký tự đại diện để bắt đầu một chuỗi nhưng khi sử dụng trong cặp dấu ngoặc vuông, cụ thể hơn là sau khi mở khung, nó sẽ có nghĩa là không khớp với các ký tự sau ^
trong
[^c]\oi => Dong doi la phai biet nguon coi cua nhau
3. 3 lần lặp lại
Biểu thức chính quy
0, Biểu thức chính quy
1 hoặc Biểu thức chính quy
2 được sử dụng để chỉ sự xuất hiện bao nhiêu lần của 1 hoặc 1 mẫu nhóm có thể xuất hiện
3. 3. 1 *
Biểu thức chính quy
1 đại diện cho không hoặc nhiều ký tự. Ví dụ biểu thức chính quy Biểu thức chính quy
4 chúng ta có thể hiểu là sau Biểu thức chính quy
5 không thể có hoặc nhiều ký tự đứng sau nó. Nhưng nếu nó xuất hiện sau một ký tự lớp được đặt trong dấu ngoặc, thì nó sẽ khớp với tất cả các trường hợp được đặt trong dấu ngoặc đó. Ví dụ, biểu thức chính quy Biểu thức chính quy
6 có nghĩa là so khớp với bất kỳ chữ cái thường nào
[a-z]* => Nguyễn minh hoàng sinh nam bảo nhiều
Biểu thức chính quy
1 may be used with meta character, to could so khớp bất cứ chuỗi ký tự nào của Biểu thức chính quy
8. Biểu thức chính quy
1 may be used with khoảng trắng Regular Expression
0 to match a string of chứa khoảng trắng. Ví dụ, ta có biểu thức chính quy như sau Regular Expression
1 có nghĩa là. không hoặc nhiều dấu cách, theo sau đó là ký tự Regular Expression
2, tiếp theo sau đó là ký tự Regular Expression
3, cuối cùng là không hoặc nhiều dấu cách
\s*em\s* => Khi đổi mới em còn làm mong, một kem trước công
3. 3. 2 +
Biểu thức chính quy
0 đại diện cho một hoặc nhiều ký tự. Ví dụ, ta có biểu thức chính quy Regular Expression
5 nghĩa là bắt đầu so khớp bắt đầu là Regular Expression
6 tiếp theo là một ký tự bất kỳ nhưng bởi vì phía sau nó có ký tự Biểu thức chính quy
0 nên bắt buộc sau Regular Expression
6 phải có nhiều ký tự
u. +n => Chung ta uon luon tuon cuon
3. 3. 3?
Biểu thức chính quy
2 đại diện cho một hoặc không có ký tự nào. Ví dụ, biểu thức chính quy regex
1 có nghĩa là. Có hoặc không có ký tự N, tiếp theo là ký tự regex
2, tiếp theo diễn ra cuối cùng là ký tự Regular Expression
6
[N]?hieu => Nhieu nguoi cho rang hieu nhau chua phai la du
3. 4 niềng răng {}
Trong biểu thức chính quy regex
4 được gọi là độ dài thông thường được sử dụng để chỉ ra số lượng, hoặc số lần xuất hiện của ký tự hoặc nhóm ký tự có thể lặp lại. Ví dụ, ta có biểu thức chính quy như sau regex
5 có nghĩa là. các ký tự số tối thiểu là 2 và không được nhiều hơn 3, các ký tự số nằm trong khoảng từ 0 đến 9
regex
5 => nam nay la nam 2020
Chúng ta có thể lấy nhiều hơn 3 ký tự theo cách như sau
regex
7 => nam nay la nam 2020
Hoặc lấy đúng 2 ký tự số
regex
8 => nam nay la nam 2020
3. 5 Thu thập giá trị
Giá trị chụp là một nhóm các mẫu nhỏ hơn được đặt trong dấu regex
9. Ví dụ regexp
0 có nghĩa là. bắt đầu bằng regexp
1 hoặc regexp
2, tiếp theo là ký tự Regular Expression
6, và cứ đến cuối là biểu thức đại diện
7
[ng. th]uyen => nguyen nhan dan den thuyền bi lat la song to
[[a-z]+][[0-9]+] => hoang0607
3. 6 luân phiên
Trong biểu thức chính quy, thì regexp
5 được sử dụng để định nghĩa hoặc có cái này hoặc có cái kia, hoặc có cả hai. It same as allow regexp
6 in the setting. Ví dụ regexp
7 có nghĩa là. tiền bắt đầu bằng regexp
8 hoặc regexp
9, tiếp đến là ^
0, tiếp theo đó là biểu thức đại diện
6 hoặc ^
2, tiếp theo đó là cuối cùng là Biểu thức chính quy
5
[C. c] treo. ta => Chung ta la mot gia dinh, chung khong phai gia dinh
3. 7 ký tự đặc biệt
Khi chúng ta muốn sử dụng các ký tự đặc biệt trong đoạn regex regular expression
2 thì chúng ta có thể kèm theo các ký tự từ ^
5 trước các ký tự đặc biệt đó để đỡ bị nhầm lẫn với cú pháp regex nhé.
[g. c. m]a\. => ga an ca, cho an ga, cho can ma
3. 8 neo ^, $
Trong chương trình chúng ta muốn kiểm tra xem hai biến có chính xác bằng nhau hay không thì chúng ta chỉ cần so sánh ^
6. Còn lại, trong biểu thức chính quy, chúng ta sẽ sử dụng bắt đầu ^
và các ký tự kết thúc $
được đặt ở đầu hoặc cuối biểu thức chính, như vậy khi so khớp sẽ so sánh từ đầu đến cuối, tức là chúng ta sẽ khớp như vậy
3. 8. 1 mỏ neo ^
Mình sẽ lấy 2 ví dụ để giải thích cho các bạn nhé
uy => nguyễn uy
trong trường hợp này thì các bạn thấy đấy nó sẽ khớp với tất cả những từ có ^
9 không phân biệt là ^
9 nó nằm ở đâu. Nhưng khi bạn thêm [a-z-9_-]
1 thì nó sẽ khác
^uyen => nguyễn uy
- Ký tự thứ 1 phải là chứ không phải
Regular Expression
6 và bắt đầu chuỗi - Ký tự thứ 2 phải là chữ
[a-z-9_-]
3 - ...
- Cuối ký tự phải là chữ
biểu thức đại diện
7
3. 8. 2 neo $
Mình cũng sẽ lấy 2 ví dụ để giải thích cho các bạn
ủy khuất. => nguyễn uyên
Nhưng khi bạn thêm $
vào cuối regex thì nó sẽ như sau
ủy khuất. $ => nguyễn uy uy
Ý nghĩa là bắt buộc sau ký tự biểu thức đại diện
7 phải là dấu hiệu regular expression
3 thì mới hợp lệ
4. Bộ tốc ký và ký tự
Biểu thức chính quy mang đến cú pháp rút gọn mà thuận tiện hơn trong công việc chúng ta viết các biểu thức chính quy
Tốc kýMô tả. Bất kỳ ký tự nào ngoại trừ ký tự xuống dòng \n\w[a-zA-Z0-9_]\W[\w]\d[0-9]\D[^\d]\s[^\s5. Nhìn xung quanh
Lookaround được chia làm 2 loại đó là lookahead và lookbehind. Nó dùng để kiểm tra điều kiện ở phía trước hoặc phía sau mẫu đứng trước hoặc sau nó. Lookahead được sử dụng khi chúng ta có mẫu điều kiện này đi trước mẫu khác. Ví dụ, bạn muốn lấy tất cả các số trước đó là ký tự $
[? $1.67 $1.02
5. 1 Cái nhìn tích cực [?=]
Ví dụ bạn muốn lấy ra tất cả những người dùng đứng sau là [a-z-9_-]
9 thì có thể viết biểu thức chính quy như sau
'/[^\is]+[[email được bảo vệ]]/' => nguyen minh hoang@gmail. com
ý ở đây sẽ chỉ lấy những chuỗi đầu vào nào mà có đuôi [a-z-9_-]
9 thôi
5. 2 Nhìn trước tiêu cực [?. ]
It is reverse of $
1. Bây giờ mình thay thế $
1 bằng $
3 thì sẽ có kết quả ngược lại. '/[^\s]+[[email được bảo vệ]]/' => nguyenmhoang@framgia. com
5. 3 Cái Nhìn Tích Cực
Mình sẽ lấy ví dụ để các bạn hiểu rõ hơn nhé. Bạn muốn regex những email có phần đầu là $
4, các bạn sẽ viết biểu thức chính quy như sau
[? nguyenminhhoang**@gmail.com** nguyenminhhoang**@yahoo.com** [email protected]framgia.com
5. 4 Cái nhìn tiêu cực
Ngược lại với Tích cực ở bên trên thì chính là Tiêu cực. Các bạn muốn lấy phần đuôi của email không phải của $
4 thì các bạn sẽ viết đoạn regex như sau
[? Nguyễn minh nguyên
/Nguyen/gi => Nguyễn minh nguyễn
Cái cờ này các bạn lưu ý để sử dụng trong các engine trực tuyến có sẵn nhé, tùy các bạn chọn cờ nào mà kết quả khớp với regex nó sẽ khác nhau
6. 2 Tìm kiếm toàn cầu [g]
Công cụ sửa đổi biểu thức đại diện
6 được sử dụng để tìm kiếm trong những cái gì ghê tởm trong chuỗi đầu vào. Ví dụ, biểu thức chính quy biểu thức đại diện
09 có nghĩa là. Bất kỳ ký tự nào ngoại trừ ký tự xuống dòng mới, tiếp theo đó là ký tự Biểu thức chính quy
5, sau đó nữa là biểu thức đại diện
7. Bởi vì cuối cùng có cờ biểu thức đại diện
6 nên nó sẽ tìm tất cả các khả năng có thể khớp với đầu vào chuỗi, không chỉ tìm và trả về kết quả đầu tiên
/. [a]n/ => Con ngan danh dan ta lung
/. [a]n/g => Con ngan danh dan ta lung
6. 3 Đa tuyến [m]
Công cụ sửa đổi Regular Expression
3 được sử dụng khi chúng tôi cần khớp đoạn đầu vào có nhiều dòng. Như mình đã nói ở trên là ký tự neo biểu thức đại diện
14 được sử dụng để kiểm tra xem mẫu có muốn khớp ở đầu hay ở cuối của chuỗi đầu vào không. Nhưng nếu chúng ta muốn các ký tự neo làm việc trên một dòng tức thời là đầu vào không có ký tự regular expression
5. Nếu các bạn muốn nó khớp trên nhiều dòng thì các bạn chọn cờ Regular Expression
3 ở cuối động cơ nhé. Ví dụ, bạn có biểu thức chính quy như sau
biểu thức đại diện
17 => Nguyên
minh
nguyen.
biểu thức đại diện
18 => Nguyên
minh
nguyen.
7. Kết luận
Vì thế qua vài điều mình chia sẻ ở trên mong rằng một phân nào các bạn cũng hiểu hơn về biểu thức chính quy. Bài chia sẻ tiếp theo mình sẽ đi tìm hiểu một số hàm sử dụng với biểu thức chính quy và một số ví dụ nhé. Cảm ơn các bạn đã đọc bài chia sẻ của mình