Regex

9 min read
💡
Lark hỗ trợ cú pháp RE2, và biểu thức chính quy mặc định phân biệt chữ hoa chữ thường.
Ví dụ về Regex
Các ví dụ sau đây minh họa cách sử dụng và xây dựng biểu thức chính quy đơn giản. Mỗi ví dụ bao gồm loại văn bản cần khớp, biểu thức chính quy được sử dụng để khớp văn bản đó, và các bình luận giải thích cách sử dụng các ký tự đặc biệt và định dạng.
  1. Chỉ khớp cụm từ chính xác
Trường hợp ví dụ
Khớp cụm từ "stock tips"
Ví dụ về Regex
Ví dụ 1: (\W|^)stock\stips(\W|$)
Ví dụ 2: (\W|^)stock\s{0,3}tips(\W|$)
Ví dụ 3: (\W|^)stock\s{0,3}tip(s){0,1}(\W|$)
Ghi chú
  • \W khớp với bất kỳ ký tự nào không phải là chữ cái, số, hoặc gạch dưới. Nó ngăn biểu thức chính quy khớp với các ký tự trước và sau cụm từ.
  • Trong ví dụ 2, \s khớp với dấu cách, và {0,3} chỉ ra rằng có thể có từ 0 đến 3 dấu cách giữa các từ stocktip.
  • ^ khớp với bắt đầu của một dòng mới và cho phép biểu thức chính quy khớp với các cụm từ xuất hiện ở đầu dòng (khi không có các ký tự khác trước cụm từ).
  • $ khớp với cuối dòng và cho phép biểu thức chính quy khớp với các cụm từ xuất hiện ở cuối dòng (khi không có các ký tự khác sau cụm từ).
  • Trong ví dụ 3, (s) khớp với chữ "s," và {0,1} chỉ ra rằng chữ cái này có thể xuất hiện ở cuối từ "tip" 0 hoặc 1 lần. Điều này có nghĩa là biểu thức chính quy sẽ khớp cả stock tipstock tips. Bạn cũng có thể sử dụng ? thay cho {0,1}.
  1. Khớp các từ hoặc cụm từ trong danh sách
Ví dụ về tình huống
Khớp bất kỳ từ hoặc cụm từ nào từ danh sách dưới đây:
  • baloney
  • darn
  • drat
  • fooey
  • gosh darnit
  • heck
Ví dụ về Regex
(?i)(\W|^)(baloney|darn|drat|fooey|gosh\sdarnit|heck)(\W|$)
Ghi chú
  • (…) nhóm các từ lại với nhau để lớp ký tự \W có thể được áp dụng cho tất cả chúng.
  • (?i) sẽ bỏ qua trường hợp ký tự trong nội dung khớp.
  • \W khớp với bất kỳ ký tự nào không phải là chữ cái, số hoặc gạch dưới. Nó ngăn regex khớp với các ký tự trước hoặc sau bất kỳ từ/cụm từ nào trong danh sách.
  • ^ khớp với bắt đầu của một dòng mới và cho phép regex khớp với các từ xuất hiện ở đầu dòng (khi không có ký tự nào khác trước từ).
  • $ khớp với cuối dòng và cho phép regex khớp với các từ xuất hiện ở cuối dòng (khi không có ký tự nào sau từ).
  • | đại diện cho "hoặc," cho phép regex này khớp với bất kỳ từ nào trong danh sách.
  • \s khớp với một ddấu cách. Sử dụng ký tự này để tách các từ trong một cụm từ.
  1. Khớp các từ với các cách đánh vần khác nhau hoặc ký tự đặc biệt
Ví dụ tình huống
Khớp từ "diagram" khi được biểu diễndiễn bằng các ký tự đặc biệt, như:
  • di@gram
  • d1agram
  • d1@gram
  • d!@gr@m
Ví dụ về Regex
d[i!1][a@]gr[a@]m
Ghi chú
  • \W không được sử dụng ở đây, vì vậy bất kỳ ký tự nào có thể xuất hiện trước hoặc sau bất kỳ biến thể nào của từ diagram. Ví dụ, regex vẫn sẽ khớp diagram trong văn bản sau:
diagram!! hoặc ***diagram***
  • [i!1] khớp với các ký tự i, !, hoặc 1 ở vị trí ký tự thứ hai của từ.
  1. Khớp tất cả các địa chỉ email cho một miền cụ thể
Ví dụ tình huống
Khớp với bất kỳ địa chỉ email nào có tên miền yahoo.com, hotmail.com, và gmail.com.
Ví dụ về Regex
(\W|^)[\w.\-]{0,25}@(yahoo|hotmail|gmail)\.com(\W|$)
Ghi chú
  • \W khớp với bất kỳ ký tự nào không phải là chữ cái, số, hoặc gạch dưới. Điều này ngăn chặn regex khớp với bất kỳ ký tự nào trước hoặc sau địa chỉ email.
  • ^ khớp với bắt đầu của một dòng mới và cho phép regex khớp với các địa chỉ xuất hiện ở đầu dòng (khi không có ký tự nào trước địa chỉ).
  • $ khớp với cuối dòng và cho phép regex khớp với các địa chỉ xuất hiện ở cuối dòng (khi không có ký tự nào sau địa chỉ).
  • [\w.\-] khớp với tất cả các ký tự từ (a–z, A–Z, 0–9, hoặc gạch dưới), dấu chấm, hoặc gạch ngang. Đây là những ký tự hợp lệ thường được sử dụng nhất trong phần đầu của một địa chỉ email. \ - (đại diện cho một gạch ngang) phải xuất hiện cuối cùng trong danh sách các ký tự trong dấu ngoặc vuông.
  • Một \ trước một gạch ngang và dấu chấm được sử dụng để "loại bỏ" các ký tự này, chỉ ra rằng gạch ngang và dấu chấm không được coi là ký tự đặc biệt trong biểu thức chính quy. Dấu chấm không cần phải được loại bỏ từ bên trong dấu ngoặc vuông.
  • {0,25} đại diện cho số lượng ký tự có thể xuất hiện trước ký hiệu @, tức là, 0–25.
  • (…) nhóm các tên miền lại với nhau, với ký hiệu | phân tách các tên miền đại diện cho "hoặc."
  1. Khớp với tất cả các địa chỉ IP trong một phạm vi
Ví dụ tình huống
Khớp với tất cả các địa chỉ IP trong phạm vi từ 192.168.1.0 đến 192.168.1.255.
Ví dụ về Regex
Ví dụ 1: 192\.168\.1\.
Ví dụ 2: 192\.168\.1\.\d{1,3}
Ghi chú
  • \ trước mỗi dấu chấm được sử dụng để "loại bỏ" các dấu chấm này, chỉ ra rằng dấu chấm không được coi là ký tự đặc biệt trong biểu thức chính quy.
  • Trong ví dụ 1, không có ký tự nào khác sau dấu chấm cuối cùng, vì vậy biểu thức chính quy sẽ khớp với tất cả các địa chỉ IP bắt đầu bằng 192.168.1. dù sau đó là gì.
  • Trong ví dụ 2, \d khớp với tất cả các số từ 0 đến 9 sau dấu chấm cuối cùng, và {1,3} chỉ định 1–3 số sau dấu chấm cuối cùng. Trong trường hợp này, regex sẽ khớp với tất cả các địa chỉ IP hoàn chỉnh bắt đầu bằng 192.168.1. Regex này cũng sẽ khớp với các địa chỉ IP không hợp lệ, như 192.168.1.999.
  1. Khớp với các định dạng chữ và số
Ví dụ tình huống
Khớp với số đơn đặt hàng của một công ty. Số này có thể có nhiều định dạng, chẳng hạn như:
  • PO nn-nnnnn
  • PO-nn-nnnn
  • PO# nn nnnn
  • PO#nn-nnnn
  • PO nnnnnn
Ví dụ về Regex
(\W|^)po[#\-]{0,1}\s{0,1}\d{2}[\s-]{0,1}\d{4}(\W|$)
Ghi chú
  • \W khớp với bất kỳ ký tự nào không phải là chữ cái, số, hoặc gạch dưới. Nó ngăn chặn regex khớp với các ký tự trước và sau số.
  • ^ khớp với bắt đầu của một dòng mới và cho phép regex khớp với các số xuất hiện ở đầu dòng (khi không có ký tự nào trước số).
  • $ khớp với cuối dòng và cho phép regex khớp với các số xuất hiện ở cuối dòng (khi không có ký tự nào sau số).
  • [#\-] khớp với dấu thăng hoặc gạch ngang sau các chữ "PO," và {0,1} chỉ ra rằng mỗi ký tự này có thể xuất hiện 0 hoặc 1 lần. \ - (đại diện cho một gạch ngang) phải xuất hiện cuối cùng trong danh sách các ký tự trong dấu ngoặc vuông.
  • \s khớp với các khoảng trắng, và {0,1} chỉ ra rằng một khoảng trắng có thể xuất hiện 0 hoặc 1 lần.
  • \d khớp với bất kỳ số nào từ 0–9, và {2} chỉ ra rằng chính xác 2 số phải xuất hiện tại vị trí này trong số PO.
Phụ lục biểu thức
các loại biểu thức ký tự đơn
ví dụ
bất kỳ ký tự nào, có thể bao gồm dòng mới (s=true)
.
lớp ký tự
[xyz]
lớp ký tự phủ định
[^xyz]
lớp ký tự Perl
\d
lớp ký tự Perl phủ định
\D
lớp ký tự ASCII
[[:alpha:]]
lớp ký tự ASCII phủ định
[[:^alpha:]]
lớp ký tự Unicode (tên một chữ)
\pN
lớp ký tự Unicode
\p{Greek}
lớp ký tự Unicode phủ định (tên một chữ)
\PN
lớp ký tự Unicode phủ định
\P{Greek}
Phức hợp
xy
x theo sau bởi y
x|y
x hoặc y (ưu tiên x)
Lặp lại
x*
không hoặc nhiều hơn x, ưu tiên nhiều
x+
một hoặc nhiều hơn x, ưu tiên nhiều
x?
không hoặc một x, ưu tiên một
x{n,m}
n hoặc n+1 hoặc ... hoặc m x, ưu tiên nhiều
x{n,}
n hoặc nhiều hơn x, ưu tiên nhiều
x{n}
chính xác n x
x*?
không hoặc nhiều hơn x, ưu tiên ít
x+?
một hoặc nhiều hơn x, ưu tiên ít
x??
không hoặc một x, ưu tiên không
x{n,m}?
n hoặc n+1 hoặc ... hoặc m x, ưu tiên ít
x{n,}?
n hoặc nhiều hơn x, ưu tiên ít
x{n}?
chính xác n x
x{}
(≡ x*) (KHÔNG HỖ TRỢ) VIM
x{-}
(≡ x*?) (KHÔNG HỖ TRỢ) VIM
x{-n}
(≡ x{n}?) (KHÔNG HỖ TRỢ) VIM
x=
(≡ x?) (KHÔNG HỖ TRỢ) VIM
Giới hạn triển khai: Các hình thức đếm x{n,m}, x{n,}, và x{n} từ chối các hình thức tạo ra số lần lặp lại tối thiểu hoặc tối đa trên 1000. Số lần lặp lại không giới hạn không áp dụng cho giới hạn này.
Lặp lại sở hữu
x*+
không hoặc nhiều hơn x, sở hữu (KHÔNG ĐƯỢC HỖ TRỢ)
x++
một hoặc nhiều hơn x, sở hữu (KHÔNG ĐƯỢC HỖ TRỢ)
x?+
không hoặc một x, sở hữu (KHÔNG ĐƯỢC HỖ TRỢ)
x{n,m}+
n hoặc ... hoặc m x, sở hữu (KHÔNG ĐƯỢC HỖ TRỢ)
x{n,}+
n hoặc Thêm x, sở hữu (KHÔNG ĐƯỢC HỖ TRỢ)
x{n}+
chính xác n x, sở hữu (KHÔNG ĐƯỢC HỖ TRỢ)
Cờ
i
không phân biệt chữ hoa chữ thường (mặc định là sai)
m
chế độ nhiều dòng: ^ và $ khớp với bắt đầu/kết thúc dòng cũng như bắt đầu/kết thúc văn bản (mặc định là sai)
s
cho phép . khớp với \n (mặc định là sai)
U
không tham lam: đổi ý nghĩa của x* và x*?, x+ và x+?, v.v. (mặc định là sai)
Cú pháp cờ là xyz (đặt) hoặc -xyz (xóa) hoặc xy-z (đặt xy, xóa z).
Nhóm
(re)
nhóm bắt (phụ trợ)
(?P<name>re)
nhóm bắt được đặt tên & số (phụ trợ)
(?<name>re)
nhóm bắt được đặt tên & số (phụ trợ) (KHÔNG ĐƯỢC HỖ TRỢ)
(?'name're)
nhóm bắt được đặt tên & số (phụ trợ) (KHÔNG ĐƯỢC HỖ TRỢ)
(?:re)
nhóm không bắt
(?flags)
đặt cờ trong nhóm hiện tại; không bắt
(?flags:re)
đặt cờ trong re; không bắt
(?#text)
bình luận (KHÔNG ĐƯỢC HỖ TRỢ)
(?|x|y|z)
đặt lại số nhánh (KHÔNG ĐƯỢC HỖ TRỢ)
(?>re)
khớp sở hữu của re (KHÔNG ĐƯỢC HỖ TRỢ)
re@>
khớp sở hữu của re (KHÔNG ĐƯỢC HỖ TRỢ) VIM
%(re)
nhóm không bắt (KHÔNG ĐƯỢC HỖ TRỢ) VIM
Chuỗi rỗng
^
ở đầu văn bản hoặc dòng (m=true)
$
ở cuối văn bản (giống \z không phải \Z) hoặc dòng (m=true)
\A
ở đầu văn bản
\b
tại ranh giới từ ASCII (\w ở một bên và \W, \A, hoặc \z ở bên kia)
\B
không tại ranh giới từ ASCII
\g
ở đầu văn bản con đang được tìm kiếm (KHÔNG HỖ TRỢ) PCRE
\G
ở cuối lần khớp cuối cùng (KHÔNG HỖ TRỢ) PERL
\Z
ở cuối văn bản, hoặc trước dòng mới ở cuối văn bản (KHÔNG HỖ TRỢ)
\z
ở cuối văn bản
(?=re)
trước văn bản khớp với re (KHÔNG HỖ TRỢ)
(?!re)
trước văn bản không khớp với re (KHÔNG HỖ TRỢ)
(?<=re)
sau văn bản khớp với re (KHÔNG HỖ TRỢ)
(?<!re)
sau văn bản không khớp với re (KHÔNG HỖ TRỢ)
re&
trước văn bản khớp với re (KHÔNG HỖ TRỢ) VIM
re@=
trước văn bản khớp với re (KHÔNG HỖ TRỢ) VIM
re@!
trước văn bản không khớp với re (KHÔNG HỖ TRỢ) VIM
re@<=
sau văn bản khớp với re (KHÔNG HỖ TRỢ) VIM
re@<!
sau văn bản không khớp với re (KHÔNG HỖ TRỢ) VIM
\zs
đặt bắt đầu của khớp (= \K) (KHÔNG HỖ TRỢ) VIM
\ze
đặt kết thúc của khớp (KHÔNG HỖ TRỢ) VIM
\%^
bắt đầu của tập tin (KHÔNG HỖ TRỢ) VIM
\%$
kết thúc của tập tin (KHÔNG HỖ TRỢ) VIM
\%V
trên màn hình (KHÔNG HỖ TRỢ) VIM
\%#
vị trí con trỏ (KHÔNG HỖ TRỢ) VIM
\%'m
vị trí đánh dấu m (KHÔNG HỖ TRỢ) VIM
\%23l
trong dòng 23 (KHÔNG HỖ TRỢ) VIM
\%23c
trong cột 23 (KHÔNG HỖ TRỢ) VIM
\%23v
trong cột ảo 23 (KHÔNG HỖ TRỢ) VIM
Chuỗi thoát
\a
chuông (≡ \007)
\f
ngắt trang (≡ \014)
\t
tab ngang (≡ \011)
\n
dòng mới (≡ \012)
\r
trở về đầu dòng (≡ \015)
\v
ký tự tab dọc (≡ \013)
\*
ký tự *, cho bất kỳ ký tự dấu câu *
\123
mã ký tự bát phân (lên đến ba chữ số)
\x7F
mã ký tự hex (đúng hai chữ số)
\x{10FFFF}
mã ký tự hex
\C
khớp một byte duy nhất ngay cả trong chế độ UTF-8
\Q...\E
văn bản nguyên bản ... ngay cả khi ... có dấu câu
\1
tham chiếu ngược (KHÔNG HỖ TRỢ)
\b
phím backspace (KHÔNG HỖ TRỢ) (sử dụng \010)
\cK
ký tự điều khiển ^K (KHÔNG HỖ TRỢ) (sử dụng \001 etc)
\e
thoát (KHÔNG HỖ TRỢ) (sử dụng \033)
\g1
tham chiếu ngược (KHÔNG HỖ TRỢ)
\g{1}
tham chiếu ngược (KHÔNG HỖ TRỢ)
\g{+1}
tham chiếu ngược (KHÔNG HỖ TRỢ)
\g{-1}
tham chiếu ngược (KHÔNG HỖ TRỢ)
\g{name}
tham chiếu ngược có tên (KHÔNG HỖ TRỢ)
\g<name>
lời gọi hàm con (KHÔNG HỖ TRỢ)
\g'name'
lời gọi hàm con (KHÔNG HỖ TRỢ)
\k<name>
tham chiếu ngược có tên (KHÔNG HỖ TRỢ)
\k'name'
tham chiếu ngược có tên (KHÔNG HỖ TRỢ)
\lX
X viết thường (KHÔNG HỖ TRỢ)
\ux
x viết hoa (KHÔNG HỖ TRỢ)
\L...\E
văn bản viết thường ... (KHÔNG HỖ TRỢ)
\K
đặt lại bắt đầu của $0 (KHÔNG HỖ TRỢ)
\N{name}
ký tự Unicode có tên (KHÔNG HỖ TRỢ)
\R
ngắt dòng (KHÔNG HỖ TRỢ)
\U...\E
văn bản viết hoa ... (KHÔNG HỖ TRỢ)
\X
chuỗi Unicode mở rộng (KHÔNG HỖ TRỢ)
\%d123
ký tự thập phân 123 (KHÔNG HỖ TRỢ) VIM
\%xFF
ký tự hex FF (KHÔNG HỖ TRỢ) VIM
\%o123
ký tự bát phân 123 (KHÔNG HỖ TRỢ) VIM
\%u1234
ký tự Unicode 0x1234 (KHÔNG HỖ TRỢ) VIM
\%U12345678
ký tự Unicode 0x12345678 (KHÔNG HỖ TRỢ) VIM
Yếu tố lớp ký tự
x
ký tự đơn
A-Z
Phạm vi ký tự (bao gồm)
\d
Lớp ký tự Perl
[:foo:]
Lớp ký tự ASCII foo
\p{Foo}
Lớp ký tự Unicode Foo
\pF
Lớp ký tự Unicode F (tên một chữ)
Lớp ký tự có tên như yếu tố lớp ký tự
[\d]
số (≡ \d)
[^\d]
không phải số (≡ \D)
[\D]
không phải số (≡ \D)
[^\D]
không phải không phải số (≡ \d)
[[:name:]]
lớp ASCII có tên bên trong lớp ký tự (≡ [:name:])
[^[:name:]]
lớp ASCII có tên bên trong lớp ký tự phủ định (≡ [:^name:])
[\p{Name}]
tính chất Unicode có tên bên trong lớp ký tự (≡ \p{Name})
[^\p{Name}]
tính chất Unicode có tên bên trong lớp ký tự phủ định (≡ \P{Name})
Written by: Lark Help Center
Đã cập nhật vào 2024-04-09
Bài viết này có hữu ích không?
Cảm ơn bạn đã phản hồi!
Cần được trợ giúp thêm? Vui lòng liên hệ Bộ phận hỗ trợ.
rangeDom