Chuyển tới nội dung chính

RegEX - Cheatsheet

Tổng hợp RegEX Cheatsheet - Tham khảo về RegEX, bao gồm các ký hiệu, phạm vi, nhóm...

cửa hàng
roadmaps
cheatsheet
tài liệu phỏng vấn

🔖 Gợi ý từ Admin

📝 Tài liệu phỏng vấn kiến thức lập trình: Xem tại đây!!!

📌 Tìm hiểu về thuật toán: Xem tại đây!!!

📌 Roadmaps - Lộ trình trở thành một lập trình viên: Xem tại đây!!!

⚡️ Cheatsheet các ngôn ngữ lập trình: Xem tại đây!!!

⚡️ Handbook lập trình: Xem tại đây!!!

I. Tổng hợp RegEx Cheatsheet

1. Cơ bản

⚡️ Các nhóm ký tự (Character Classes)

RegEXMô tả
[abc]Một ký tự duy nhất trong: a, b hoặc c
[^abc]Một ký tự ngoại trừ: a, b hoặc c
[a-z]Một ký tự trong khoảng: a-z
[^a-z]Một ký tự không nằm trong khoảng: a-z
[0-9]Một chữ số trong khoảng: 0-9
[a-zA-Z]Một ký tự trong khoảng: a-z hoặc A-Z
[a-zA-Z0-9]Một ký tự trong khoảng: a-z, A-Z hoặc 0-9

⚡️ Định lượng (Quantifiers)

RegEXMô tả
a?Không hoặc một ký tự a
a*Không hoặc nhiều ký tự a
a+Một hoặc nhiều ký tự a
[0-9]+Một hoặc nhiều chữ số 0-9
a{3}Chính xác 3 ký tự a
a{3,}3 hoặc nhiều ký tự a
a{3,6}Từ 3 đến 6 ký tự a
a*Định lượng tham lam
a*?Định lượng lười biếng
a*+Định lượng sở hữu

⚡️ Các ký tự đặc biệt phổ biến (Common Metacharacters)

RegEXMô tả
.Bất kỳ ký tự nào (ngoại trừ ký tự xuống dòng)
^Bắt đầu chuỗi
$Kết thúc chuỗi
*0 hoặc nhiều lần của ký tự trước đó
+1 hoặc nhiều lần của ký tự trước đó
?0 hoặc 1 lần của ký tự trước đó
\Gánh đảo, làm mất đi ý nghĩa đặc biệt của ký tự
[]Tập hợp các ký tự cho phép
|OR logigal (hoặc)
()Nhóm các biểu thức để thực hiện hoặc phép đảo ngược
{}Đặc tả số lần xuất hiện của biểu thức trước đó

⚡️ Các ký hiệu Meta (Meta Sequences)

RegEXMô tả
.Bất kỳ ký tự đơn nào
\sBất kỳ ký tự trắng nào (khoảng trắng, tab, xuống dòng, vv.)
\SBất kỳ ký tự không phải trắng nào
\dBất kỳ chữ số nào (tương đương với [0-9])
\DBất kỳ ký tự không phải số nào (tương đương với [^0-9])
\wBất kỳ ký tự từ (word character) nào
\WBất kỳ ký tự không phải từ nào
\XBất kỳ chuỗi Unicode nào, bao gồm cả xuống dòng
\CKý tự dữ liệu đơn
\RDấu xuống dòng Unicode
\vKý tự khoảng trắng dọc (vertical whitespace)
\VPhủ định của \v - bất cứ thứ gì ngoại trừ xuống dòng và tab dọc
\hKý tự khoảng trắng ngang (horizontal whitespace)
\HPhủ định của \h
\KĐặt lại sự khớp (Reset match)
\nKết quả sự khớp thứ n
\pXThuộc tính Unicode X
\p{...}Thuộc tính Unicode hoặc loại kịch bản
\PXPhủ định của \pX
\P{...}Phủ định của \p
\Q...\ETrích dẫn; xem như chúng là chữ cái
\k<name>Khớp với tên mẫu con name (Match subpattern name)
\k'name'Khớp với tên mẫu con name (Match subpattern name)
\k{name}Khớp với tên mẫu con name (Match subpattern name)
\gnKhớp với mẫu con thứ n
\g{n}Khớp với mẫu con thứ n
\g<n>Lặp lại mẫu con thứ n
\g'n'Lặp lại mẫu con thứ n
\g{-n}Khớp với mẫu con trước đó tương đối thứ n
\g<+n>Lặp lại mẫu con kế tiếp tương đối thứ n
\g'+n'Lặp lại mẫu con kế tiếp tương đối thứ n
\g'letter'Lặp lại mẫu con tên bắt đầu bằng chữ cái letter
\g{letter}Khớp với mẫu con trước đó tên bắt đầu bằng chữ cái letter
\g<letter>Lặp lại mẫu con tên bắt đầu bằng chữ cái letter
\xYYKý tự hex YY
\x{YYYY}Ký tự hex YYYY
\dddKý tự octal ddd
\cYKý tự kiểm soát Y
[\b]Ký tự Backspace
\Làm cho bất kỳ ký tự nào trở nên literal

⚡️ Ký tự móc (Anchors)

RegEXMô tả
\GBắt đầu của sự khớp (match)
^Bắt đầu của chuỗi
$Kết thúc của chuỗi
\ABắt đầu của chuỗi
\ZKết thúc của chuỗi
\zKết thúc tuyệt đối của chuỗi
\bMột biên (boundary) của từ
\BKhông phải biên (boundary) của từ

⚡️ Thay thế (Substitution)

RegEXMô tả
\0Toàn bộ nội dung của sự khớp (match)
\1Nội dung trong nhóm bắt (capture) 1
$1Nội dung trong nhóm bắt (capture) 1
${foo}Nội dung trong nhóm bắt (capture) foo
\x20Giá trị thay thế thập lục phân
\x{06fa}Giá trị thay thế thập lục phân
\tTab
\rKí tự xuống dòng
\nKí tự xuống dòng mới
\fKí tự xuống dòng mới
\UBiến đổi thành chữ in hoa
\LBiến đổi thành chữ thường
\EChấm dứt bất kỳ biến đổi nào

⚡️ Nhóm Constructs (Group Constructs)

RegEXMô tả
(...)Bắt(capture) tất cả mọi thứ nằm trong ngoặc
(a|b)Khớp (match) với a hoặc b
(?:...)Khớp (match) với tất cả mọi thứ nằm trong ngoặc
(?>...)Nhóm nguyên tử (không bắt)
(?|...)Sao chép lại số nhóm mẫu
(?#...)Chú thích
(?'name'...)Nhóm bắt (capture) có tên là "name"
(?<name>...)Nhóm bắt (capture) có tên là "name"
(?P<name>...)Nhóm bắt (capture) có tên là "name"
(?imsxXU)Các bộ điều chỉnh nội suy
(?(DEFINE)...)Định nghĩa mẫu trước khi sử dụng chúng

⚡️ Khẳng định (Assertions)

RegEXMô tả
(?(1)có|không)Câu lệnh có điều kiện
(?(R)có|không)Câu lệnh có điều kiện
(?(R#)có|không)Câu lệnh có điều kiện đệ quy
(?(R&name)có|không)Câu lệnh có điều kiện
(?(?=...)có|không)Câu lệnh có điều kiện nhìn vào
(?(?<=...)có|không)Câu lệnh có điều kiện nhìn lùi vào

⚡️ Nhìn và kiểm tra (Lookarounds): Nhìn và kiểm tra cho phép bạn khớp (match) một nhóm trước (nhìn lùi - lookbehind) hoặc sau (nhìn vào - lookahead) biểu thức chính mà không bao gồm nó trong kết quả.

RegEXMô tả
(?=...)Nhìn vào tích cực
(?!...)Nhìn vào tiêu cực
(?<=...)Nhìn lùi tích cực
(?<!...)Nhìn lùi tiêu cực

⚡️ Cờ/Hiệu chỉnh (Flags/Modifiers)

RegEXMô tả
gToàn cục
mNhiều dòng
iKhông phân biệt chữ hoa thường
xBỏ qua khoảng trắng
sMột dòng
uUnicode
XMở rộng
UKhông tham lam
AGắn kết
JTên nhóm trùng lặp

⚡️ Đệ quy (Recurse)

RegEXMô tả
(?R)Đệ quy toàn bộ biểu thức
(?1)Đệ quy vào nhóm con đầu tiên
(?+1)Đệ quy vào nhóm con tương đối đầu tiên
(?&name)Đệ quy vào nhóm con với tên
(?P=name)Kết hợp với nhóm con với tên
(?P>name)Đệ quy vào nhóm con với tên

⚡️ POSIX Character Classes

Lớp ký tự POSIXTương đươngÝ nghĩa
[[:alnum:]][0-9A-Za-z]Chữ cái và chữ số
[[:alpha:]][A-Za-z]Chữ cái
[[:ascii:]][\x00-\x7F]Mã ASCII từ 0-127
[[:blank:]][\t ]Khoảng trắng hoặc tab
[[:cntrl:]][\x00-\x1F\x7F]Ký tự điều khiển
[[:digit:]][0-9]Chữ số thập phân
[[:graph:]][[:alnum:][:punct:]]Ký tự hiển thị (không phải khoảng trắng)
[[:lower:]][a-z]Chữ cái thường
[[:print:]][ -~] == [ [:graph:]]Ký tự hiển thị
[[:space:]][\t\n\v\f\r ]Khoảng trắng
[[:upper:]][A-Z]Chữ cái in hoa
[[:word:]][0-9A-Za-z_]Ký tự trong từ
[[:xdigit:]][0-9A-Fa-f]Chữ số hexa
[[:<:]][\b(?=\w)]Bắt đầu từ
[[:>:]][\b(?<=\w)]Kết thúc từ

⚡️ Control verb

RegExMô tả
(*ACCEPT)Điều khiển
(*FAIL)Điều khiển
(*MARK:NAME)Điều khiển
(*COMMIT)Điều khiển
(*PRUNE)Điều khiển
(*SKIP)Điều khiển
(*THEN)Điều khiển
(*UTF)Sửa đổi mẫu
(*UTF8)Sửa đổi mẫu
(*UTF16)Sửa đổi mẫu
(*UTF32)Sửa đổi mẫu
(*UCP)Sửa đổi mẫu
(*CR)Sửa đổi dòng
(*LF)Sửa đổi dòng
(*CRLF)Sửa đổi dòng
(*ANYCRLF)Sửa đổi dòng
(*ANY)Sửa đổi dòng
\RSửa đổi dòng
(*BSR_ANYCRLF)Sửa đổi dòng
(*BSR_UNICODE)Sửa đổi dòng
(*LIMIT_MATCH=x)Sửa đổi engine regex
(*LIMIT_RECURSION=d)Sửa đổi engine regex
(*NO_AUTO_POSSESS)Sửa đổi engine regex
(*NO_START_OPT)Sửa đổi engine regex

2. Ví dụ về regex

⚡️ Ký tự (character): Sử dụng \ để tìm kiếm các ký tự đặc biệt sau: [ \ ^ $ . | ? * + ( ) { }

RegEXMô tả
ringKết hợp với ring, springboard, vv.
.Kết hợp với a, 9, +, vv.
h.oKết hợp với hoo, h2o, h/o, vv.
ring\?Kết hợp với ring?
\(quiet\)Kết hợp với (quiet)
c:\\windowsKết hợp với c:\windows

⚡️ Lựa chọn (Alternatives): Sắp xếp từ dài đến ngắn khi các lựa chọn chồng lấn nhau.

RegEXMô tả
cat|dogKết hợp với cat hoặc dog
id|identityKết hợp với id hoặc identity
identity|idKết hợp với id hoặc identity

⚡️ Lớp ký tự (Character classes): trong [ ] luôn luôn phải bỏ . \ ] và đôi khi là ^ - .

RegEXMô tả
[aeiou]Kết hợp với bất kỳ nguyên âm nào
[^aeiou]Kết hợp với MỘT KHÔNG nguyên âm
r[iau]ngKết hợp với ring, wrangle, sprung, v.v.
gr[ae]yKết hợp với gray hoặc grey
[a-zA-Z0-9]Kết hợp với bất kỳ chữ cái hoặc số nào
[\u3a00-\ufa99]Kết hợp với bất kỳ ký tự Unicode Hàn (中文) nào

⚡️ Các lớp viết tắt (Shorthand classes)

RegEXMô tả
\wKý tự "word" (chữ cái, số hoặc gạch dưới)
\dChữ số
\sKhoảng trắng (khoảng trống, tab, vtab, dòng mới)
\W, \D, hoặc \SKhông phải word, digit hoặc whitespace
[\D\S]Có nghĩa là không phải digit hoặc whitespace, cả hai đều phù hợp
[^\d\s]Không cho phép digit và khoảng trắng

⚡️ Xuất hiện (Occurrences)

RegEXMô tả
colou?rPhù hợp với color hoặc colour
[BW]ill[ieamy's]*Phù hợp với Bill, Willy, William's, vv.
[a-zA-Z]+Phù hợp với 1 hoặc nhiều chữ cái
\d{3}-\d{2}-\d{4}Phù hợp với một SSN
[a-z]\w{1,7}Phù hợp với một UW NetID

⚡️ Greedy vs lazy

RegEXMô tả
* + {n,} (tham lam)Phù hợp với nhiều nhất có thể
<.+>Tìm một kết quả lớn trong bold
*? +? {n,}? (lười biếng)Phù hợp với ít nhất có thể
<.+?>Tìm 2 kết quả trong bold

⚡️ Phạm vi (Scope)

RegEXMô tả
\bĐầu từ (kế bên ký tự không phải "từ")
\bringTừ bắt đầu bằng "ring", ví dụ ringtone
ring\bTừ kết thúc bằng "ring", ví dụ spring
\b9\bPhù hợp với chữ số đơn 9, không phải 19, 91, 99, vv.
\b[a-zA-Z]{6}\bPhù hợp với từ có 6 chữ cái
\BKhông phải đầu từ
\Bring\BPhù hợp với springs và wringer
^\d*$Toàn bộ chuỗi phải là số
^[a-zA-Z]{4,20}$Chuỗi phải có từ 4-20 chữ cái
^[A-Z]Chuỗi phải bắt đầu bằng chữ cái in hoa
[\.!?"')]$Chuỗi phải kết thúc bằng dấu chấm câu, dấu chấm than, dấu hỏi, dấu ngoặc đơn

⚡️ Chỉnh sửa (Modifiers)

RegEXMô tả
(?i)[a-z]*(?-i)Bật/Tắt không phân biệt chữ hoa và chữ thường
(?s).*(?-s)Phù hợp với nhiều dòng (gây ra . phù hợp với dòng mới)
(?m)^.*;$(?-m)^ & $ phù hợp với dòng chứ không phải toàn bộ chuỗi
(?x)Chế độ #free-spacing, cho phép chú thích dòng mới bị bỏ qua
(?-x)Tắt chế độ free-spacing
/regex/ismxChế độ sửa đổi cho toàn bộ chuỗi

⚡️ Nhóm (Groups): Trình phân tích cố gắng mỗi lựa chọn nếu kết quả không khớp sau nhóm có thể dẫn đến quá trình theo dõi phức tạp.

RegEXMô tả
(in|out)putPhù hợp với input hoặc output
\d{5}(-\d{4})?Mã zip Hoa Kỳ ("+ 4" không bắt buộc)

⚡️ Tham chiếu ngược (Back references)

RegEXMô tả
(to) (be) or not \1 \2Phù hợp với to be or not to be
([^\s])\1{2}Phù hợp với không gian, sau đó cùng một ký tự hai lần nữa aaa, ...
\b(\w+)\s+\1\bPhù hợp với từ lặp lại

⚡️ Nhóm không ghi lại (Non-capturing group): Sử dụng nhóm không ghi lại hoặc nhóm atomic khi có thể.

RegEXMô tả
on(?:click|load)Nhanh hơn: on(click|load)

⚡️ Nhóm nguyên tử (Atomic groups):

RegEXMô tả
(?>red|green|blue)Nhanh hơn so với nhóm không ghi lại
(?>id|identity)\bKhớp với id, nhưng không phải là identity

"id" được khớp, nhưng \b thất bại sau nhóm nguyên tử, trình phân tích không lùi lại vào nhóm để thử lại 'identity'

Nếu các lựa chọn chồng lấn, sắp xếp từ dài đến ngắn.

⚡️ If-then-else

Khớp "Mr." hoặc "Ms." nếu từ "her" xuất hiện sau đó trong chuỗi

M(?(?=.*?\bher\b)s|r)\.

⚡️ Lookaround (Nhìn xung quanh)

RegEXMô tả
(?= )Nhìn về phía trước, nếu bạn có thể tìm thấy phía trước
(?! )Nhìn về phía trước, nếu bạn không thể tìm thấy phía trước
(?<= )Nhìn về phía sau, nếu bạn có thể tìm thấy phía sau
(?<! )Nhìn về phía sau, nếu bạn không thể tìm thấy phía sau
\b\w+?(?=ing\b)Khớp với warbling, string, fishing, ...
\b(?!\w+ing\b)\w+\bNhững từ KHÔNG kết thúc bằng "ing"
(?<=\bpre).*?\bKhớp với pretend, present, prefix, ...
\b\w{3}(?<!pre)\w*?\bNhững từ KHÔNG bắt đầu bằng "pre"
\b\w+(?<!ing)\bKhớp với từ KHÔNG kết thúc bằng "ing"

⚡️ Backreferences (Tham chiếu ngược): trong biểu thức chính quy là cách để ánh xạ lại (refer back) đến các nhóm con đã được chụp trước đó trong biểu thức. Dưới đây là một số ví dụ về cách sử dụng tham chiếu ngược:

  • (to) (be) or not \1 \2: Khớp với "to be or not to be". Trong đó, \1 tham chiếu đến nhóm con đầu tiên (to), và \2 tham chiếu đến nhóm con thứ hai (be).
  • ([^\s])\1{2}: Khớp với bất kỳ ký tự không phải khoảng trắng nào được lặp lại chính nó ít nhất 2 lần. Ví dụ, "aaa", "!!", "33".
  • \b(\w+)\s+\1\b: Khớp với bất kỳ từ nào được lặp lại khi có một khoảng trắng ở giữa. Ví dụ, "hello hello", "world world".

Lưu ý rằng việc sử dụng tham chiếu ngược có thể tăng cường khả năng xử lý và độ phức tạp của biểu thức chính quy, đặc biệt là khi có nhiều nhóm con được sử dụng.

3. RegEX trong Python

⚡️ Import module biểu thức chính quy trong Python

import re

Trong Python, thư viện re được sử dụng để làm việc với biểu thức chính quy (regular expressions). Việc import thư viện này là bước cần thiết để có thể sử dụng các chức năng liên quan đến biểu thức chính quy trong ngôn ngữ lập trình Python.

⚡️ Các hàm liên quan đến biểu thức chính quy trong Python

RegExMô Tả
re.findallTrả về một danh sách chứa tất cả các kết quả khớp
re.finditerTrả về một iterable của các đối tượng Match (mỗi đối tượng cho một kết quả khớp)
re.searchTrả về một đối tượng Match nếu có kết quả khớp bất kỳ nào trong chuỗi
re.splitTrả về một danh sách nơi chuỗi đã được chia tại mỗi kết quả khớp
re.subThay thế một hoặc nhiều kết quả khớp bằng một chuỗi
re.compileBiên dịch một biểu thức chính quy để sử dụng sau này
re.escapeTrả về chuỗi với tất cả các ký tự không phải chữ và số được thêm dấu gạch chéo (backslash)

Lưu ý: Các hàm này là một phần của thư viện re trong Python và được sử dụng để thực hiện các thao tác liên quan đến biểu thức chính quy.

⚡️ Cờ (Flags)

Cú PhápRegExMô Tả
re.Ire.IGNORECASEBỏ qua sự phân biệt chữ hoa và thường
re.Mre.MULTILINEĐa dòng
re.Lre.LOCALEBiến \w, \b, \s phụ thuộc vào locale
re.Sre.DOTALLDấu chấm (.) khớp với mọi thứ (bao gồm cả dòng mới)
re.Ure.UNICODEBiến \w, \b, \d, \s phụ thuộc vào Unicode
re.Xre.VERBOSEKiểu định dạng đọc được

⚡️ Ví dụ

re.search()
>>> sentence = 'This is a sample string'
>>> bool(re.search(r'this', sentence, flags=re.I))
True
>>> bool(re.search(r'xyz', sentence))
False
re.findall()
>>> re.findall(r'\bs?pare?\b', 'par spar apparent spare part pare')
['par', 'spar', 'spare', 'pare']
>>> re.findall(r'\b0*[1-9]\d{2,}\b', '0501 035 154 12 26 98234')
['0501', '154', '98234']
re.finditer()
>>> m_iter = re.finditer(r'[0-9]+', '45 349 651 593 4 204')
>>> [m[0] for m in m_iter if int(m[0]) < 350]
['45', '349', '4', '204']
re.split()
>>> re.split(r'\d+', 'Sample123string42with777numbers')
['Sample', 'string', 'with', 'numbers']
re.sub()
>>> ip_lines = "catapults\nconcatenate\ncat"
>>> print(re.sub(r'^', r'* ', ip_lines, flags=re.M))
* catapults
* concatenate
* cat
re.compile()
>>> pet = re.compile(r'dog')
>>> type(pet)
<class '_sre.SRE_Pattern'>
>>> bool(pet.search('They bought a dog'))
True
>>> bool(pet.search('A cat crossed their path'))
False

4. RegEx trong JavaScript

test()
let textA = 'I like APPles very much';
let textB = 'I like APPles';
let regex = /apples$/i;

// Output: false
console.log(regex.test(textA));

// Output: true
console.log(regex.test(textB));
search()
let text = 'I like APPles very much';
let regexA = /apples/;
let regexB = /apples/i;

// Output: -1
console.log(text.search(regexA));

// Output: 7
console.log(text.search(regexB));
exec()
let text = 'Do you like apples?';
let regex = /apples/;

// Output: apples
console.log(regex.exec(text)[0]);

// Output: Do you like apples?
console.log(regex.exec(text).input);
match()
let text = 'Here are apples and apPleS';
let regex = /apples/gi;

// Output: [ "apples", "apPleS" ]
console.log(text.match(regex));
split()
let text = 'This 593 string will be brok294en at places where d1gits are.';
let regex = /\d+/g;

// Output: [ "This ", " string will be brok", "en at places where d", "gits are." ]
console.log(text.split(regex));
matchAll()
let regex = /t(e)(st(\d?))/g;
let text = 'test1test2';
let array = [...text.matchAll(regex)];

// Output: ["test1", "e", "st1", "1"]
console.log(array[0]);

// Output: ["test2", "e", "st2", "2"]
console.log(array[1]);
replace()
let text = 'Do you like aPPles?';
let regex = /apples/i;

// Output: Do you like mangoes?
let result = text.replace(regex, 'mangoes');
console.log(result);
replaceAll()
let regex = /apples/gi;
let text = 'Here are apples and apPleS';

// Output: Here are mangoes and mangoes
let result = text.replaceAll(regex, 'mangoes');
console.log(result);

5. RegEx trong PHP

⚡️ Các hàm liên quan đến biểu thức chính quy trong PHP

RegExMô Tả
preg_match()Thực hiện việc so khớp biểu thức chính quy
preg_match_all()Thực hiện so khớp biểu thức chính quy toàn cầu
preg_replace_callback()Thực hiện tìm kiếm và thay thế biểu thức chính quy sử dụng một hàm gọi lại
preg_replace()Thực hiện tìm kiếm và thay thế biểu thức chính quy
preg_split()Chia một chuỗi bằng biểu thức chính quy
preg_grep()Trả về các mục trong mảng khớp với một mẫu

Lưu ý: Các hàm này được sử dụng trong ngôn ngữ lập trình PHP để thao tác với biểu thức chính quy.

preg_replace
$str = "Visit Microsoft!";
$regex = "/microsoft/i";

// Output: Visit QuickRef!
echo preg_replace($regex, "QuickRef", $str);
preg_match
$str = "Visit QuickRef";
$regex = "#quickref#i";

// Output: 1
echo preg_match($regex, $str);
preg_grep
$arr = ["Jane", "jane", "Joan", "JANE"];
$regex = "/Jane/";

// Output: Jane
echo preg_grep($regex, $arr);
preg_matchall
$regex = "/[a-zA-Z]+ (\d+)/";
$input_str = "June 24, August 13, and December 30";
if (preg_match_all($regex, $input_str, $matches_out)) {
// Output: 2
echo count($matches_out);

// Output: 3
echo count($matches_out[0]);

// Output: Array("June 24", "August 13", "December 30")
print_r($matches_out[0]);

// Output: Array("24", "13", "30")
print_r($matches_out[1]);
}
preg_split
$str = "Jane\tKate\nLucy Marion";
$regex = "@\s@";

// Output: Array("Jane", "Kate", "Lucy", "Marion")
print_r(preg_split($regex, $str));

6. RegEx trong Java

⚡️ Styles

First way
Pattern p = Pattern.compile(".s", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("aS");
boolean s1 = m.matches();
System.out.println(s1); // Outputs: true
Second way
boolean s2 = Pattern.compile("[0-9]+").matcher("123").matches();
System.out.println(s2); // Outputs: true
Third way
boolean s3 = Pattern.matches(".s", "XXXX");
System.out.println(s3); // Outputs: false

⚡️ Các Trường Pattern

RegExMô Tả
CANON_EQTương đương Canon
CASE_INSENSITIVESo sánh không phân biệt chữ hoa chữ thường
COMMENTSCho phép dấu cách và ghi chú
DOTALLChế độ Dotall
MULTILINEChế độ Multiline
UNICODE_CASEFolding chữ theo Unicode
UNIX_LINESChế độ Unix lines

⚡️ Các phương thức (methods)

Pattern

  • Pattern compile(String regex [, int flags]): Biên dịch biểu thức chính quy thành đối tượng Pattern.
  • boolean matches([String regex, ] CharSequence input): Kiểm tra xem biểu thức chính quy có khớp với chuỗi đầu vào không.
  • String[] split(String regex [, int limit]): Chia chuỗi thành mảng con dựa trên biểu thức chính quy.
  • String quote(String s): Trả về một phiên bản chuỗi làm cho bất kỳ ký tự đặc biệt nào trong chuỗi trở thành chuỗi mẫu đơn giản.

Matcher

  • int start([int group | String name]): Trả về vị trí bắt đầu của phù hợp của nhóm hoặc tên xác định.
  • int end([int group | String name]): Trả về vị trí kết thúc của phù hợp của nhóm hoặc tên xác định.
  • boolean find([int start]): Tìm sự khớp tiếp theo của biểu thức chính quy trong chuỗi.
  • String group([int group | String name]): Trả về phần của chuỗi phù hợp với nhóm hoặc tên xác định.
  • Matcher reset(): Đặt lại matcher để bắt đầu lại từ đầu.

String

  • boolean matches(String regex): Kiểm tra xem chuỗi có khớp với biểu thức chính quy không.
  • String replaceAll(String regex, String replacement): Thay thế tất cả các phù hợp của biểu thức chính quy trong chuỗi bằng chuỗi thay thế.
  • String[] split(String regex[, int limit]): Chia chuỗi thành mảng con dựa trên biểu thức chính quy.

Còn nhiều phương thức khác nữa...

⚡️ Ví dụ

Replace sentence
String regex = "[A-Z\n]{5}$";
String str = "I like APP\nLE";

Pattern p = Pattern.compile(regex, Pattern.MULTILINE);
Matcher m = p.matcher(str);

// Outputs: I like Apple!
System.out.println(m.replaceAll("pple!"));
Array of all matches
String str = "She sells seashells by the Seashore";
String regex = "\\w*se\\w*";

Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(str);

List<String> matches = new ArrayList<>();
while (m.find()) {
matches.add(m.group());
}

// Outputs: [sells, seashells, Seashore]
System.out.println(matches);

7. RegEX trong MySQL

⚡️ Các hàm liên quan đến biểu thức chính quy trong MySQL

HàmMô tả
REGEXPKiểm tra xem chuỗi có khớp với biểu thức chính quy không
REGEXP_INSTR()Trả về vị trí bắt đầu của chuỗi con khớp với biểu thức chính quy (Lưu ý: Chỉ MySQL 8.0+)
REGEXP_LIKE()Kiểm tra xem chuỗi có khớp với biểu thức chính quy không (Lưu ý: Chỉ MySQL 8.0+)
REGEXP_REPLACE()Thay thế chuỗi con khớp với biểu thức chính quy (Lưu ý: Chỉ MySQL 8.0+)
REGEXP_SUBSTR()Trả về chuỗi con khớp với biểu thức chính quy (Lưu ý: Chỉ MySQL 8.0+)
REGEXP
-- expr REGEXP pat
mysql> SELECT 'abc' REGEXP '^[a-d]';
1
mysql> SELECT name FROM cities WHERE name REGEXP '^A';
mysql> SELECT name FROM cities WHERE name NOT REGEXP '^A';
mysql> SELECT name FROM cities WHERE name REGEXP 'A|B|R';
mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
1 0
REGEXP_REPLACE
-- REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])
mysql> SELECT REGEXP_REPLACE('a b c', 'b', 'X');
a X c
mysql> SELECT REGEXP_REPLACE('abc ghi', '[a-z]+', 'X', 1, 2);
abc X
REGEXP_SUBSTR
-- REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])
mysql> SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+');
abc
mysql> SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3);
ghi
REGEXP_LIKE
-- REGEXP_LIKE(expr, pat[, match_type])
mysql> SELECT regexp_like('aba', 'b+')
1
mysql> SELECT regexp_like('aba', 'b{2}')
0
mysql> # i: case-insensitive
mysql> SELECT regexp_like('Abba', 'ABBA', 'i');
1
mysql> # m: multi-line
mysql> SELECT regexp_like('a\nb\nc', '^b$', 'm');
1
REGEXP_INSTR
-- REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]])
mysql> SELECT regexp_instr('aa aaa aaaa', 'a{3}');
2
mysql> SELECT regexp_instr('abba', 'b{2}', 2);
2
mysql> SELECT regexp_instr('abbabba', 'b{2}', 1, 2);
5
mysql> SELECT regexp_instr('abbabba', 'b{2}', 1, 3, 1);
7

II. Tài liệu tham khảo

Chia sẻ: