Regex (Biểu thức chính quy) là gì?

Viết tắt của cụm từ thông dụng, regex là một chuỗi văn bản cho phép bạn tạo các mẫu giúp khớp, định vị và quản lý văn bản. Perl là một ví dụ tuyệt vời về ngôn ngữ lập trình sử dụng các biểu thức chính quy. Tuy nhiên, đây chỉ là một trong nhiều nơi bạn có thể tìm thấy các biểu thức thông thường. Biểu thức thông thường cũng có thể được sử dụng từ dòng lệnh và trong trình soạn thảo văn bản để tìm văn bản trong một tệp.

Khi lần đầu tiên cố gắng hiểu các biểu thức chính quy, dường như đó là một ngôn ngữ khác. Tuy nhiên, việc thành thạo các biểu thức thông thường có thể giúp bạn tiết kiệm hàng nghìn giờ nếu bạn làm việc với văn bản hoặc cần phân tích một lượng lớn dữ liệu. Dưới đây là một ví dụ về biểu thức chính quy với mỗi thành phần được dán nhãn. Biểu thức chính quy này cũng được hiển thị trong các ví dụ lập trình Perl được hiển thị sau trên trang này.

Khái niệm cơ bản của biểu thức chính quy (cheat sheet)

Nhìn vào ví dụ trên có thể là quá sức. Tuy nhiên, một khi bạn hiểu cú pháp cơ bản về cách các lệnh biểu thức chính quy hoạt động, bạn có thể đọc ví dụ trên giống như khi bạn đang đọc câu này. Thật không may, không phải tất cả các chương trình, lệnh và ngôn ngữ lập trình đều sử dụng cùng một biểu thức chính quy, nhưng chúng đều có chung điểm tương đồng.

Tính cáchNó làm gì?Thí dụKết quả phù hợp
^Trận đấu bắt đầu của dòng^ abcabc, abcdef .., abc123
$Trận đấu cuối dòngabc $của tôi: abc, 123abc, thablesc
.Phù hợp với bất kỳ nhân vậtACabc, asg, a2c
|Toán tử ORabc | xyzabc hoặc xyz
(...)Chụp bất cứ thứ gì khớp(a) b (c)Chụp 'a' và 'c'
(?: ...)Nhóm không bắt giữ(a) b (?: c)Chụp 'a' nhưng chỉ nhóm 'c'
[...]Khớp mọi thứ có trong ngoặc[abc]a, b hoặc c
[^ ...]Khớp mọi thứ không có trong ngoặc[^ abc]xyz, 123, 1de
[az]Khớp với bất kỳ ký tự nào giữa 'a' và 'z'[bz]bc, tâm trí, xyz
{x}Số lần 'x' chính xác để khớp(abc) {2}abcabc
{x, }Khớp 'x' số lần trở lên(abc) {2, }abcabc, abcabcabc
{x, y}Khớp giữa 'x' và 'y' lần.(a) {2, 4}aa, aaa, aaaaa
*Trận đấu tham lam phù hợp với mọi thứ thay cho *ab * cabc, abbcc, abcdc
+Khớp nhân vật trước + một hoặc nhiều lầna + cac, aac, aaac,
?Phù hợp với nhân vật trước? không hoặc một lần. Ngoài ra, được sử dụng như một trận đấu không tham lamab? cac, abc
\Thoát khỏi nhân vật sau dấu gạch chéo ngược hoặc tạo một chuỗi thoát.mộtAC

Ký tự thoát (chuỗi thoát)

Lưu ý: ký tự thoát là trường hợp nhạy cảm.

Tính cáchNó làm gì?
\Bất kỳ ký tự nào không được đề cập dưới đây có trước \ sẽ được thoát. Ví dụ, \. phù hợp với một khoảng thời gian và không thực hiện chức năng được đề cập ở trên. Các ký tự nên được thoát là () [] {} ^ $. | * +? \
\ 0Nhân vật rỗng
\ aKhớp chuông hoặc báo động.
\ bRanh giới từ trong hầu hết hoặc backspace
\ BRanh giới không từ
\ dKhớp bất kỳ chữ số thập phân nào (0-9)
\ DKhớp bất kỳ chữ số nào
\ ePhù hợp với một lối thoát
\ fPhù hợp với nguồn cấp dữ liệu mẫu
\ nNối một dòng mới
\ Q ... \ EBỏ qua bất kỳ ý nghĩa đặc biệt trong những gì đang được khớp.
\ rPhù hợp với một sự trở lại vận chuyển
\SKhớp một ký tự khoảng trắng (dấu cách, \ t, \ r, \ n)
\SPhù hợp với bất kỳ nhân vật không phải màu trắng
\ tKhớp một tab
\ vKhớp một tab dọc
\ wKhớp với bất kỳ ký tự một từ nào [a-zA-Z_0-9]
\Khớp với bất kỳ một ký tự không từ nào

Cờ biểu thức chính quy

Bên ngoài các biểu thức chính quy (ở cuối) có thể được sử dụng để trợ giúp với việc khớp mẫu.

Tính cáchNó làm gì?
tôiBỏ qua trường hợp (cho phép viết hoa và viết thường)
mTrận đấu nhiều dòng
SNối các dòng mới
xCho phép không gian và ý kiến
JTên nhóm trùng lặp được phép
BạnTrận đấu thuận

Ví dụ biểu thức ngôn ngữ lập trình Perl

Dưới đây là một vài ví dụ về biểu thức chính quy và khớp mẫu trong Perl. Nhiều trong số các ví dụ này tương tự hoặc giống với các ngôn ngữ lập trình và chương trình khác hỗ trợ các biểu thức chính quy.

 $ data = ~ s / dữ liệu xấu / dữ liệu tốt / i; 

Ví dụ trên thay thế bất kỳ "dữ liệu xấu" nào bằng "dữ liệu tốt" bằng cách sử dụng đối sánh không phân biệt chữ hoa chữ thường. Vì vậy, nếu biến $ data là "Đây là dữ liệu xấu" thì nó sẽ trở thành "Đây là dữ liệu tốt".

 $ dữ liệu = ~ s / a / A /; 

Ví dụ này thay thế bất kỳ chữ thường a bằng chữ hoa A. Vì vậy, nếu $ data là "ví dụ" thì nó sẽ trở thành "exAmple".

 $ dữ liệu = ~ s / [az] / * /; 

Ví dụ trên thay thế bất kỳ chữ cái viết thường, từ a đến z, bằng dấu hoa thị. Vì vậy, nếu $ data là "Ví dụ" thì nó sẽ trở thành "E ******".

 $ dữ liệu = ~ s / e $ / es /; 

Ví dụ này sử dụng ký tự $, cho biết biểu thức chính quy khớp với văn bản trước nó ở cuối chuỗi. Vì vậy, nếu $ data là "ví dụ" thì nó sẽ trở thành "ví dụ".

 $ dữ liệu = ~ s /\./!/; 

Trong ví dụ trên, chúng tôi đang thay thế một khoảng thời gian bằng dấu chấm than. Bởi vì dấu chấm là một ký tự meta nếu bạn chỉ nhập một khoảng thời gian không có \ (thoát), nó được coi là bất kỳ ký tự nào. Trong ví dụ này, nếu $ data là "ví dụ". nó sẽ trở thành "ví dụ!", tuy nhiên, nếu bạn không có lối thoát, nó sẽ thay thế mọi nhân vật và trở thành "!!!!!!!!"

 $ dữ liệu = ~ s / ^ e / E /; 

Cuối cùng, trong ví dụ trên, dấu mũ (^) cho biết biểu thức chính quy để khớp với bất cứ thứ gì ở đầu dòng. Trong ví dụ này, điều này sẽ khớp với bất kỳ chữ thường e nào ở đầu dòng và thay thế nó bằng chữ hoa E. Do đó, nếu $ data là "ví dụ" thì nó sẽ trở thành "Ví dụ".

Mẹo: Nếu bạn muốn khám phá các biểu thức chính quy thậm chí nhiều hơn trong các lệnh như grep hoặc biểu thức chính quy trong ngôn ngữ lập trình, hãy xem cuốn sách "Làm chủ các biểu thức chính quy".

Từ viết tắt máy tính, Trình tự thoát, Biểu thức, Glob, Siêu ký tự, Thuật ngữ lập trình, Tilde, Wildcard