Mẹo Hướng dẫn Hướng dẫn php regex lookahead Mới Nhất
Lê Minh Phương đang tìm kiếm từ khóa Hướng dẫn php regex lookahead được Cập Nhật vào lúc : 2022-09-24 16:15:56 . Với phương châm chia sẻ Kinh Nghiệm Hướng dẫn trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi đọc Post vẫn ko hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Tác giả lý giải và hướng dẫn lại nha.Regular expression là một nhóm của những ký tự được dùng để tìm ra một pattern rõ ràng nào đó trong một hay một vài câu hay đoạn text. Bạn hoàn toàn có thể gọi chúng là biểu thức đại diện cũng khá được. Đứng về khía cạnh là một developer thì regular expression hoàn toàn có thể được xem là một công cụ rất là mạnh trong việc lập trình, bạn chắc như đinh đã từng phải dùng chúng trong chương trình của bạn ví dụ như hiệu suất cao search hay thay thể biểu thức, vân vân và mây mây... Các ứng dụng rất khác nhau và ngôn từ lập trình sẽ có những những implement cho biểu thức regex một cách rất khác nhau, nhưng về mặt ý tưởng, về mặt concept thì chúng giống nhau. Trong nội dung bài viết này mình sẽ dùng ngôn từ PHP để lý giải và lấy ví dụ cho những bạn hiểu thêm về Regex nhé.
Nội dung chính- 1 Biểu thức chính quy là gì ?2.Ví dụ cơ bản3.1 Match với một ký tự bất kỳ3.2 Character set3.2.1 Negated character set3.3 Repetitions3.4 Braces 3.5 Capturing value3.6 Alternation3.7 Special Character3.8 Anchors ^, $3.8.1 Anchor ^3.8.2 Anchor $4. Shorthand and Character Sets5. Lookaround5.1
Positive Lookahead (?=)5.2 Negative
Lookahead (?!)5.3 Positive Lookbehind5.4 Negative Lookbehind6.1 Case intensive (i)6.2 Global search (g)6.3 Multiline (m)7. Kết luận8.
Tham khảo
Nội dung chính
- 1 Biểu thức chính quy là gì ?2.Ví dụ cơ bản3.Meta Characters3.1 Match với một ký tự bất kỳ3.2 Character set3.2.1 Negated character set3.3 Repetitions3.4 Braces 3.5 Capturing value3.6 Alternation3.7 Special Character3.8 Anchors ^, $3.8.1 Anchor ^3.8.2 Anchor $4. Shorthand and Character Sets5. Lookaround5.1 Positive Lookahead (?=)5.2 Negative Lookahead (?!)5.3 Positive Lookbehind5.4 Negative Lookbehind6.1 Case intensive (i)6.2 Global search (g)6.3 Multiline (m)7. Kết luận8. 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 miễu tả một bộ những chuỗi khác, theo những 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 những bài viết khác bạn tìm được trên google viết tắt là regex hay regexp. Biểu thức chính quy được dùng cho việc thay thế một đoạn text trong một chuỗi dài, validate form, lấy một chuỗi nhỏ trong một chuỗi lớn dưới vào pattern mà tất cả chúng ta định nghĩa ra, và còn rất nhiều trường hợp khác những bạn hoàn toàn có thể sử dụng nó.
Hãy tưởng tượng rằng bạn đang viết một chương trình và bạn muốn set những rules cho iệc khi user lựa chọn username. Bạn muốn được cho phép user chứa những vần âm, những số lượng, gạc dưới (), hay là dấu gạch ngang (-). Bạn cũng muốn số lượng giới hạn số lượng những ký tự trong username. Bạn sử dụng biểu thức chính quy dưới đây để validate theo yêu cầu vừa đặt ra nhé
^[a-z-9_-]3,15$- ^: ký tự khởi đầu một chuỗi[a-z-9_-]: chỗ này thể hiện là được cho phép lấy vần âm, những số lượng, dầu gạch dưới, dấu gạch ngang.3,15`: số lượng giới hạn chuỗi từ 3 đến 15 ký tự$: ký tự kết thúc chuỗi.
Biểu thức chính quy ở trên hoàn toàn có thể đồng ý những chuỗi sau: hoang_nm, ho-ang_nm, và hoangnm_97. Nó không match với chuỗi Hoangnmmmmmmmmmmmmmmmmmmmmm chính bới nó chưa ký tự viết hoa và nó không nằm trong khoảng chừ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 những ký tự mà bạn hoàn toà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 Nguyen tức là nó sẽ tìm trong một đoạn text khởi đầu bằng N, tiếp đến là g và tiếp đến cho tới ở đầu cuối là n
Hoang => Nguyen Minh Hoang
Biểu thức chính quy 123 khớp với chuỗi 123. Biểu thức chính quy được so khớp với chuỗi đầu vào bằng phương pháp 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 lượt 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 hoang trong chuỗi phía trên thì chắc như đinh nó sẽ không được so khớp.
Hoang => Nguyen hoang Minh Hoang
Meta Character ở đây ý muốn nói là thay vì những bạn cố định và thắt chặt biểu thức chính quy rõ ràng như Hoang thì những bạn còn tồn tại thể lấy bao quát hơn thế nữa bằng phương pháp sử dụng khối biểu thức chính quy. Ở dưới đây là bảng lý giải khối biểu thức chính quy
Meta charactersDescription. Match với tất những những ký tự ngoại trừ ký tự đặc biệt xuống dòng n [] Match với bất kể ký tự được chứa giữa cặp ngoặc vuông này [^ ] Match với bất kể ký tự nào mà không được chứa giữa cặp ngoặc vuông này * Đại diện cho không hoặc nhiều ký tự + Match 1 hoặc nhiều lần lặp lại của hình tượng đứng trước + ? Có hay là không ký tự đứng trước nó n,m Độ dài chuỗi nằm trong khoảng chừng từ n cho đếm m (xyz) Match với chuỗi xyz theo thứ tự nhiều lần | Hoặc Đứng trước ký tự như , [], / + * . & ^ để không biến thành nhầm lẫn giữa syntax và ký tự cần match ^ Bắt đầu của input $ Match đến cuối của input3.1 Match với một ký tự bất kỳ
Trong biểu thức chính quy khi tất cả chúng ta sử dụng ký tự . là ví dụ đơn giản nhất cho việc tất cả chúng ta so khớp với nhiều ký tự trong chuỗi input. . trong biểu thức chính quy nghĩa là match với đơn ký tự. Nó sẽ không so khớp với ký tự xuống dòng n. Ví dụ, bạn có biểu thức chính quy là .g tức là nó sẽ so khớp với chuỗi đầu vào bất kể những từ nào trong chuỗi đầu vào khởi đầu bằng bất cứ ký tự nào nhưng sau đó phải là g.
.g => nguyên nguyền nguyến nguyển nguyện
3.2 Character set
Character sets được gọi là nhóm những ký tự. Cặp ngoặc vuông được dùng để chỉ ra những ký tự nào được so khớp. Thứ tự so khớp của những ký tự trong cặp dấu ngoặc vuông này những bạn không cần quan tâm. Ví dụ, ta có biếu thức chính quy như sau
[Nn]guyen => Nguyen nguyen Minh Hoang
et[.] => Day la dau cham het.
3.2.1 Negated character set
Như ta đã biết ký tự ^ là ký tự đại diện cho khởi đầu một chuỗi nhưng khi sử dụng trong cặp dấu ngặc vuông, rõ ràng hơn là sau mở ngoặc vuông thì nó sẽ nghĩa là không match với những ký tự sau ^ trong cặp dấu ngoặc vuông.
[^c]oi => Dong doi la phai biet nguon coi cua nhau.
3.3 Repetitions
+, * hoặc ? được dùng để chỉ định sự xuất hiện bao nhiêu lần của một hoặc 1 nhóm pattern hoàn toàn có thể xuất hiện.
3.3.1 *
* đại diện cho không hoặc nhiều ký tự. Ví dụ biểu thức chính quy a* tất cả chúng ta hoàn toàn có thể hiểu là sau a hoàn toàn có thể không còn hoặc nhiều ký tự đứng sau nó. Nhưng nếu nó xuất hiện sau một class ký tự được đặt trong dấu ngoặc vuông thì nó sẽ so khớp tất cả những trường hợp mà được set ở trong dấu ngoặc vuông đó. Ví dụ, biểu thức chính quy [a-z]* nghĩa là so khớp bất kể vần âm thường nào.
[a-z]* => Nguyen minh hoang sinh nam bao nhieu.
* hoàn toàn có thể được sử dụng với meta character, để hoàn toàn có thể so khớp bất kể chuỗi của những ký tự .*. * hoàn toàn có thể được sử dụng với whitespace s để so khớp một chuỗi của chứa whitespace. Ví dụ, ta có biểu thức chính quy như sau s*ems* nghĩa là: không hoặc nhiều space, theo sau đó là ký tự e, tiếp theo sau đó là ký tự m, ở đầu cuối đó là không hoặc nhiều space.
s*ems* => Khi doi moi em con do mong, an kem truoc cong
3.3.2 +
+ đại diện cho một hoặc nhiều ký tự. Ví dụ, ta có biểu thức chính quy u.+n nghĩa là khởi đầu so khớp bắt đầu là u tiếp đến là một ký tự bất kỳ nhưng chính bới đằng sau nó có ký tự + nên bắt buộc sau u phải có một hoặc nhiều ký tự, ở đầu cuối là n.
u.+n => Chung ta uon luon tuon cuon
3.3.3 ?
? đại diện cho một hoặc không còn ký tự nào. Ví dụ, biểu thức chính quy [N]?hieu nghĩa là: Có hoặc không còn ký tự N, tiếp đến là ký tự h, cứ tiếp diễn đến ở đầu cuối là ký tự u.
[N]?hieu => Nhieu nguoi cho rang hieu nhau chua phai la du
3.4 Braces
Trong biểu thức chính quy được gọi là định lượng độ dài thường được sử dụng để chỉ rõ ra số lượng, hay số lần xuất hiện của ký tự hoặc một nhóm ký tự hoàn toàn có thể lặp lại. Ví dụ, ta có biểu thức chính quy như sau [0-9]2,3 nghĩa là: những ký tự số tối thiểu là 2 và không được nhiều hơn nữa 3, ký tự số nằm trong từ 0 đến 9.
[0-9]2,3 => nam nay la nam 2020
Chúng ta hoàn toàn có thể lấy ra nhiều hơn nữa 3 ký tự bằng phương pháp như sau
[0-9]2, => nam nay la nam 2022
Hoặc lấy đúng 2 ký tự số
[0-9]2 => nam nay la nam 2020
3.5 Capturing value
Capturing value là một nhóm những pattern nhỏ hơn được đặt trong dấu (). Ví dụ (ng|th)uyen nghĩa là: khởi đầu bằng ng hoặc th, tiếp sau là ký tự u, và cứ cho tới cuối là n.
(ng|th)uyen => nguyen nhan dan den thuyen bi lat la song to
([a-z]+)([0-9]+) => hoang0607
3.6 Alternation
Trong biểu thức chính quy, thì | đượ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. Nó in như phép or trong lập trình vậy. Ví dụ (C|c)hung|ta nghĩa là: đầu tiền khởi đầu bằng C hoặc c, tiếp đến là hun, tiếp sau đó là g hoặc t, tiếp sau đó ở đầu cuối là a.
(C|c)hung|ta => Chung ta la mot gia dinh, bọn chung khong phai gia dinh
3.7 Special Character
Khi tất cả chúng ta muốn sử dụng những ký tự đặc trong đoạn regex , [], / + * . & ^ thì tất cả chúng ta hoàn toàn có thể kèm theo ký từ trước ký tự đặc biệt đó để cho đỡ bị nhầm lẫn với syntax regex nhé.
(g|c|m)a. => ga an ca, cho an ga, cho can ma.
3.8 Anchors ^, $
Trong lập trình tất cả chúng ta muốn kiểm tra xem hai biến có đúng chuẩn bằng nhau hay là không thì tất cả chúng ta chỉ việc so sánh ==. Còn trong biểu thức chính quy tất cả chúng ta sẽ sử dụng khởi đầu ^ và ký tự kết thúc $ đặt vào đầu hoặc cuối biểu thức chính quy, như vậy khi so khớp sẽ so sánh từ đầu đến cuối, tức là tất cả chúng ta sẽ so khớp hoàn toàn.
3.8.1 Anchor ^
Mình sẽ lấy 2 ví dụ để lý giải cho bạn nhé
uyen => nguyen uyen
trong trường hợp này thì những bạn thấy đấy nó sẽ match với tất cả những từ có uyen không phân biệt là uyen nó nằm ở đâu. Nhưng khi bạn thêm ^uyen thì nó sẽ khác
^uyen => nguyen uyen
- Ký tự thứ 1 phải là chứ
u và khởi đầu chuỗiKý tự thứ 2 phải là chữ y...Ký tự ở đầu cuối phải là chữ n
3.8.2 Anchor $
Mình cũng tiếp tục lấy 2 ví dụ để lý giải cho bạn
uyen. => nguyen uyen.
Nhưng khi những bạn thêm $ ở cuối regex thì nó sẽ như sau
uyen.$ => nguyen uyen uyen.
Ý là bắt buộc sau ký tự n phải là dấu . thì mới hợp lệ
4. Shorthand and Character Sets
Biểu thức chính quy mang tới syntax ngắn mà thuận tiện hơn trong việc tất cả chúng ta viết những biểu thức regex.
ShorthandDescription. Bất cứ 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 [^s]5. Lookaround
Lookaround được phân thành 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 pattern đứng trước hoặc sau nó. Lookahead được sử dụng khi tất cả chúng ta có điều kiện pattern này được đi trước pattern khác. Ví dụ, bạn muốn lấy tất cả những số trước đó là ký tự $
(?<=$)[0-9.]* => $1.67 $1.02
5.1 Positive Lookahead (?=)
Ví dụ bạn muốn lấy ra tất cả những user đứng sau là @gmail.com thì hoàn toàn có thể viết biểu thức chính quy như sau
'/[^s]+([email protected])/' => nguyenminhoang@gmail.com
ý ở đây sẽ là chỉ lấy những chuỗi đầu vào nào mà có đuôi @gmail.com thôi.
5.2 Negative Lookahead (?!)
Nó là ngược lại của ?=. Bây giờ mình thay thế ?= bằng ?! thì nó sẽ có kết quả ngược lại. '/[^s]+([email protected])/' => nguyenminhoang@framgia.com
5.3 Positive Lookbehind
Mình sẽ lấy ví dụ để bạn làm rõ hơn nhé. Bạn muốn regex những email có phần đầu là nguyenminhhoang thì những bạn sẽ viết biểu thức chính quy như sau:
(?<=nguyenminhhoang)@[^,]+ => nguyenminhhoang**@gmail.com** nguyenminhhoang**@yahoo.com** [email protected]framgia.com
5.4 Negative Lookbehind
trái lại với Positive ở phía trên thì đó đó đó là Negative. Các bạn muốn lấy phần đuôi của email không phải của nguyenminhhoang thì những bạn sẽ viết đoạn regex như sau:
(?
thì trong những chuôi thì chuỗi thỏa mãn là @framgia.com chính bới nó không chứa nguyenminhhoang
6. Flag
Flag cũng khá được gọi là modifier chính bới chúng modify đầu ra của biểu thức chính quy. Những flag này hoàn toàn có thể được sử dụng theo bất kể thứ tự hoặc phối hợp nào, và là một phần không thể thiếu của Regex.
6.1 Case intensive (i)
Ví dụ ta có biểu thức chính quy như sau /Nguyen/gi nghĩa là: đầu tiên sẽ khởi đầu bằng N, tiếp theo sau đó là g, tiếp theo là u, sau nữa là u, tiếp theo nữa là y cho tới n. Ở cuối của biểu thức chính quy là i flag có ý nghĩa bảo với engine để ignore trường hợp đã xác định ở trên. Như những bạn đã thấy tất cả chúng ta cũng thêm g flag chính bới muốn search cho pattern này ở trong toàn bộ chuỗi đầu vào.
Nguyen => Nguyen minh nguyen
/Nguyen/gi => Nguyen minh nguyen
Cái flag này những bạn lưu ý để dùng trong những engine online có sẵn nhé, tùy thuộc những bạn chọn flag nào mà kết quả match regex nó sẽ rất khác nhau.
6.2 Global search (g)
g modifier được sử dụng để tìm trong những cái gì thoả mãn trong chuỗi đầu vào. Ví dụ, biểu thức chính quy .(a)n/g nghĩa là: bất kể ký tự nào ngoại trừ ký tự xuống dòng mới, tiếp đó theo sau là ký tự a, sau đó nữa là n. Bởi vì ở đầu cuối có g flag nên nó sẽ tìm tất cả những kĩ năng hoàn toàn có thể match được trong chuỗi input, không riêng gì có 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 Multiline (m)
m modifier được sử dụng khi tất cả chúng ta cần match đoạn input có nhiều dòng. Như tôi đã nói ở trên là ký tự anchors (^, $) được sử dụng để check nếu pattern muốn match ở đầu hay ở cuối của chuỗi đầu vào. Nhưng nếu tất cả chúng ta muốn những ký tự anchors thao tác trên một dòng tức là input đầu vào không còn ký tự n. Nếu những bạn muốn nó match trên nhiều dòng thì những bạn chọn m flag ở cuối của engine nhé. Ví dụ, bạn có biểu thức chính quy như sau:
/.2uyen(.)?$/ => Nguyen
minh
nguyen.
/.2uyen(.)?$/gm => Nguyen
minh
nguyen.
7. Kết luận
Vậy qua một vài những điều mình chia sẻ ở trên mong rằng một phân nào những 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ố trong những hàm dùng với biểu thức chính quy và một số trong những những ví dụ nhé. Cảm ơn những bạn đã đọc bài chia sẻ của tớ.
8. Tham khảo
https://www.regular-expressions.info/
Tải thêm tài liệu liên quan đến nội dung bài viết Hướng dẫn php regex lookahead programming php Negative lookahead regex Lookahead trong regex Lookahead regex Regex tên Mẫu regex Ví dụ Regex