Biểu thức chính quy là các mẫu khớp văn bản được mô tả bằng cú pháp chính thức. Các mẫu được hiểu là một tập hợp các hướng dẫn, sau đó được thực thi với một chuỗi làm đầu vào để tạo ra một tập hợp con phù hợp hoặc phiên bản đã sửa đổi của bản gốc. Thuật ngữ "biểu thức chính quy" thường được rút ngắn thành "regex" hoặc "regexp" trong hội thoại. Các biểu thức có thể bao gồm khớp văn bản theo nghĩa đen, lặp lại, bố cục mẫu, phân nhánh và các quy tắc phức tạp khác. Một số lượng lớn các vấn đề về phân tích cú pháp dễ giải quyết bằng biểu thức chính quy hơn là bằng cách tạo một trình phân tích cú pháp và từ vựng có mục đích đặc biệt
Biểu thức chính quy thường được sử dụng trong các ứng dụng liên quan đến nhiều xử lý văn bản. Ví dụ: chúng thường được sử dụng làm mẫu tìm kiếm trong các chương trình chỉnh sửa văn bản được các nhà phát triển sử dụng, bao gồm vi, emac và IDE hiện đại. Chúng cũng là một phần không thể thiếu của các tiện ích dòng lệnh Unix như sed, grep và awk. Nhiều ngôn ngữ lập trình bao gồm hỗ trợ cho các biểu thức chính quy trong cú pháp ngôn ngữ [Perl, Ruby, Awk và Tcl]. Các ngôn ngữ khác, chẳng hạn như C, C++ và Python, hỗ trợ các biểu thức chính quy thông qua các thư viện mở rộng
Tồn tại nhiều triển khai mã nguồn mở của các biểu thức chính quy, mỗi triển khai chia sẻ một cú pháp cốt lõi chung nhưng có các phần mở rộng hoặc sửa đổi khác nhau đối với các tính năng nâng cao của chúng. Cú pháp được sử dụng trong mô-đun re của Python dựa trên cú pháp được sử dụng cho các biểu thức chính quy trong Perl, với một số cải tiến dành riêng cho Python
Phần này sử dụng các lệnh N
và D
để tìm kiếm các từ liên tiếp trên nhiều dòng. Xem kỹ thuật Multiline
Những ví dụ này giải quyết việc tìm kiếm các từ xuất hiện gấp đôi trong tài liệu
Dễ dàng tìm các từ kép trong một dòng bằng GNU grep
và tương tự với GNU sed
$ cat two-cities-dup1.txt It was the best of times, it was the worst of times, it was the the age of wisdom, it was the age of foolishness, $ grep -E '\b[\w+]\s+\1\b' two-cities-dup1.txt it was the the age of wisdom, $ grep -n -E '\b[\w+]\s+\1\b' two-cities-dup1.txt 3:it was the the age of wisdom, $ sed -En '/\b[\w+]\s+\1\b/p' two-cities-dup1.txt it was the the age of wisdom, $ sed -En '/\b[\w+]\s+\1\b/{=;p}' two-cities-dup1.txt 3 it was the the age of wisdom,
- Cụm từ thông dụng ‘\b\w+\s+’ tìm kiếm ranh giới từ [‘\b’], theo sau là một hoặc nhiều ký tự từ [‘\w+’], tiếp theo là khoảng trắng [‘\s+’]. Xem tiện ích mở rộng regrec
- Thêm dấu ngoặc đơn quanh biểu thức ‘[\w+]’ sẽ tạo ra một biểu thức con. Mẫu biểu thức chính quy '[PATTERN]\s+\1' xác định một biểu thức con [trong ngoặc đơn], theo sau là tham chiếu ngược, được phân tách bằng khoảng trắng. Kết hợp thành công có nghĩa là MẪU được lặp lại hai lần liên tiếp. Xem Back-references và Subexpressions
- Biểu thức ranh giới từ [‘\b’] ở cả hai đầu đảm bảo các từ một phần không được khớp [e. g. 'the then' không phải là một kết hợp mong muốn]
- Tùy chọn -E cho phép cú pháp biểu thức chính quy mở rộng, giảm bớt nhu cầu thêm dấu gạch chéo ngược trước dấu ngoặc đơn. Xem cú pháp ERE
Khi từ được nhân đôi kéo dài hai dòng, biểu thức chính quy ở trên sẽ không tìm thấy chúng vì grep
và sed
hoạt động theo từng dòng
Bằng cách sử dụng các lệnh N
và D
, sed
có thể áp dụng các biểu thức chính quy trên nhiều dòng [nghĩa là nhiều dòng được lưu trữ trong không gian mẫu và biểu thức chính quy hoạt động trên đó]
$ cat two-cities-dup2.txt It was the best of times, it was the worst of times, it was the the age of wisdom, it was the age of foolishness, $ sed -En '{N; /\b[\w+]\s+\1\b/{=;p} ; D}' two-cities-dup2.txt 3 worst of times, it was the the age of wisdom,
- Lệnh
N
nối thêm dòng tiếp theo vào không gian mẫu [do đó đảm bảo nó chứa hai dòng liên tiếp trong mỗi chu kỳ] - Biểu thức chính quy sử dụng '\s+' cho dấu tách từ khớp với cả khoảng trắng và dòng mới
- Biểu thức chính quy khớp, toàn bộ không gian mẫu được in bằng
$ cat two-cities-dup2.txt It was the best of times, it was the worst of times, it was the the age of wisdom, it was the age of foolishness, $ sed -En '{N; /\b[\w+]\s+\1\b/{=;p} ; D}' two-cities-dup2.txt 3 worst of times, it was the the age of wisdom,
2. Không có dòng nào được in theo mặc định do tùy chọn -n D
xóa dòng đầu tiên khỏi không gian mẫu [cho đến dòng mới đầu tiên], sẵn sàng cho chu kỳ tiếp theo
Xem hướng dẫn sử dụng GNU
$ cat two-cities-dup2.txt It was the best of times, it was the worst of times, it was the the age of wisdom, it was the age of foolishness, $ sed -En '{N; /\b[\w+]\s+\1\b/{=;p} ; D}' two-cities-dup2.txt 3 worst of times, it was the the age of wisdom,4 để biết giải pháp thay thế bằng cách sử dụng
$ cat two-cities-dup2.txt It was the best of times, it was the worst of times, it was the the age of wisdom, it was the age of foolishness, $ sed -En '{N; /\b[\w+]\s+\1\b/{=;p} ; D}' two-cities-dup2.txt 3 worst of times, it was the the age of wisdom,5 và
$ cat two-cities-dup2.txt It was the best of times, it was the worst of times, it was the the age of wisdom, it was the age of foolishness, $ sed -En '{N; /\b[\w+]\s+\1\b/{=;p} ; D}' two-cities-dup2.txt 3 worst of times, it was the the age of wisdom,6 tại https. //gnu. org/s/coreutils/manual/html_node/Ép-và-xóa. html