3.2.3.1 Định nghĩa
Biểu thức chính quy (Regular Expression) [10] là một chuỗi miêu tả một bộ các chuỗi khác, theo những quy tắc cú pháp nhất định. Biểu thức chính quy thường được d ng trong các trình biên tập văn bản và các tiện ích tìm kiếm và xử lý văn bản dựa trên các mẫu được quy định. Nhiều ngôn ngữ lập trình như Java, C#, Perl cũng hỗ trợ biểu thức chính quy trong việc xử lý chuỗi.
Thuật ngữ Regular Expression xuất phát từ lý thuyết toán h c và khoa h c máy tính, nó phản ánh một đặc điểm của các biểu thức toán h c được g i là chính quy (regularity). Một biểu thức có thể được thực hiện trong một phần mềm bằng
Nguyễn Cao Cường 38 Luận văn Thạc sỹ
cách sử dụng một Ôtômát hữu hạn đơn định (Deterministic Finite Automation – DFA). DFA là một trạng thái xác định và không sử dụng cơ chế quay lui (backtracking).
- Nếu sử dụng tốt những kỹ năng về biểu thức chính qui, chúng sẽ đơn giản hơn nhiều trong lập trình và quá trình xử lý văn bản và có những vấn đề sẽ không thể giải quyết được nếu không sử dụng biểu thức chính qui. Chúng ta có thể sẽ cần đến hàng trăm thủ tục để trích xuất tất cả các địa chỉ email từ một số tài liệu, đây có thể nói là một việc làm t nhạt và vất vả. Nhưng với biểu thức chính qui ta chỉ cần một số dòng lệnh hoặc thậm chí một dòng lệnh để làm việc này.
- Tuy nhiên, biểu thức chính qui cũng thường đem đến cho người sử dụng những phiền toái không mong muốn như: sử dụng một biểu thức chính quy không ph hợp với biểu thức muốn tìm, hoặc văn bản tìm được bằng biểu thức chính quy không ph hợp với yêu cầu.
- Biểu thức chính quilà một công cụ mạnh mẽ trong việc thao tác và trích xuất văn bản trên máy tính. Do đó ứng dụng biểu thức chính qui một cách hợp lý sẽ tiết kiệm nhiều thời gian và công sức.
3.2.3.2 Các phép toán trong biểu thức chính qui
Theo tác giả S. Levithan [25] các phép toán trong biểu thức chính qui thường xuyên được sử dụng bao gồm:
Phép “Or”: Một thanh d c sẽ phân tách các thay thế.
Ví dụ: “Nam”|“Nguyễn Nam” thì có thể phù hợp “Nam” hoặc “Nguyễn Nam”.
Phép “Nhóm” (Grouping): Ngoặc đơn “(” d ng để xác định phạm vi và thứ tự của các phép toán.
Ví dụ: kerim|kerem và ker(i|e)m là tương đương nhau. Cả hai đều miêu tả tập “kerim” và “kerem”.
Nguyễn Cao Cường 39 Luận văn Thạc sỹ
Phép xác định số lượng (quantifier): Một quantifier sau một token (ví dụ một kí tự) hoặc một nhóm đặc tả cách mà các thành liền trước cho phép được xảy ra.
Các phép xác định số lượng thường được sử dụng bao gồm:
? Biểu thị rỗng hay một thành phần đứng trước. Ví dụ: “ab?c” tương ứng với cả “ac” và “abc” nhưng không phải “abbc”
* Biểu thị rỗng hay nhiều thành phần đứng trước. Ví dụ: “ab*c” tương ứng với “ac”, “abc”, “abbc”,…
+ Biểu thị một hay nhiều thành phần đứng trước. Ví dụ: “ab+c” tương ứng với “ac”, “abbc”, “abbbc”,… nhưng không phải “ac”.
. Biểu thị 1 kí tự bất kì, ngoại trừ ký tự newline (dòng mới).