Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
1,87 MB
Nội dung
Giới thiệu về biểuthứcchínhquy – Introduction to Regular
expression [1]
Bài viết này sẽ giới thiệu một cách tổng quan về regular
expression (biểu thứcchính quy). Giải thích vai trò của
regular expression và giới thiệu một số công cụ để chúng ta
dễ dàng tìm hiểu, sáng tạo và debug.
1. Định nghĩa biểuthứcchínhquy (regular expression defined)
Biểu thứcchínhquy (regular expression, viết tắt là regexp, regex hay regxp) 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ểuthứcchínhquy 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 cũng hỗ trợ biểuthứcchínhquy trong việc xử
lý chuỗi, chẳng hạn như C#, Perl có bộ máy mạnh mẽ để xử lý biểuthứcchínhquy được xây
dựng trực tiếp trong cú pháp của chúng. Bộ các trình tiện ích (gồm trình biên tập sed và trình lọc
grep) đi kèm các bản phân phối Unix có vai trò đầu tiên trong việc phổ biến khái niệm biểuthức
chính quy.
- 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ểuthức toán học được gọi là chínhquy (regularity). Một biểuthức
có thể được thực hiện trong một phần mềm bằng cách sử dụng một bộ xác định giới hạn tự động
(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 bạn sử dụng tốt những kỹ năng về regular expression. 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 regular expression. Bạn 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ạc và vất vã. Nhưng với regular
expression bạn 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.
- Nói đi thì cũng phải nói lại, Regular expression 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ểuthứcchínhquy không phù hợp với
biểu thức muốn tìm, hoặc số văn bản tìm được với biểuthứcchínhquy đó không phù hợp… Do
đó dừng vội phát biểu: “Tôi biết regular expression và tôi sẽ sử dụng nó”. Để sử dụng regular
expression bạn phải có một kiến thức từ cơ bản đến nâng cao về những biểuthức và cách thức
hoạt động của nó trong các ngôn ngữ lập trình.
- Regular expression là 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 đó nắm vững các biểuthứcchínhquy sẽ giúp bạn tiết kiệm nhiều thời gian và công sức.
2. Khai báo sử dụng regular expression trong các ngôn ngữ lập trình
1
Regular expression là một phần của ngôn ngữ lập trình và các thư viện để hoạt động và phát
triển. Sau đây là khai báo sử dụng regular expression trong 2 ngôn ngữ lớn là Java và C#:
- Với ngôn ngữ Java:
using java.util.regex;
- Với ngôn ngữ C#:
using System.Text.RegularExpressions;
Với những thư viện đã khai báo sử dụng. Chúng ta có thể thực hiện những công việc thông
thường của regular expression như tìm kiếm và thay thế bằng cách xây dựng những cú pháp đặc
biệt.
3. Những công cụ làm việc với biểuthứcchínhquy (Tools for Working with Regular
Expression)
- Các công cụ được giới thiệu trong phần này sẽ giúp chúng ta xây dựng, kiểm tra lỗi, kiểm tra
cú pháp và những thông tin phản hồi hỗ trợ chúng ta lập trình tốt hơn. Bạn nên kiểm tra biểu
thức chínhquy của mình xây dựng trong những công cụ này để kiểm tra độ chính xác của biểu
thức đó.
3.1. RegexBuddy
2
- Regexbuddy là một công cụ đầy đủ các tính năng nhất hiện nay để tạo lập, kiểm tra và thực thi
các biểuthứcchính quy. Nó có bộ biểu thứcchínhquy cho những ngôn ngữ lập trình khác nhau
như: .NET, Java,… Và cho phép chuyển đổi biểuthứcchínhquy giữa các ngôn ngữ lập trình.
- RegexBuddy được thiết kế bởi Jan Goyvaerts (là một chuyên gia về Regular Expression).
- RegexBuddy sẽ tự động tô sáng những phần phù hợp với biểuthứcchínhquy của bạn, và
thông báo những lỗi xuất hiện trong biểuthứcchínhquy (nếu có). Sau đây là một vài button
thường hay sử dụng trong RegexBuddy:
• List All: hiển thị một danh sách tất cả các chuỗi phù hợp với biểuthứcchính quy.
• Replace: nằm ở phía trên của màn hình. Có chức năng tìm kiếm và thay thế chuỗi được
nhập vào trong textbox với biểuthứcchính quy.
• Split: Sử lý các biểuthứcchínhquy bằng cách tách riêng thành các token cơ sở ở những
nơi mà đối tượng của bạn được tìm thấy bằng cách sử dụng biểuthứcchínhquy của bạn.
3
• Click bất kỳ button nào và lựa chọn Update Automatically để RegexBuddy hiển thị kết
quả một cách tự động và đồng bộ khi bạn thay đổi bất cứ gì trong biểuthứcchính quy.
• Copy button: đưa biểuthứcchínhquy được tạo vào clipboard để bạn dán vào source code
của mình.
- Nếu bạn có bất cứ thắc mắc nào thì có thể tạo một tài khoảng để đăng nhập vào forum và hỏi
những điều đó. Tác giả Jan thường online trên diễn đàn để trả lời những thắc mắc đó.
- RegexBuddy có thể chạy trên Windows 98, ME, 2000, XP, Vista and Windows 7. Còn có thể
chạy tốt trên các môi trường như: Mware, Parallels, CrossOver Office. Bạn có thể download
RegexBuddy tại: http://www.regexbuddy.com/RegexBuddyCookbook.exe. Đây là bản dùng thử
7 ngày (vì đây là phần mềm trả phí).
3.2 RegexPal
- RegexPal là một trình kiểm tra biểuthứcchínhquy online được tạo bởi tác giả Steven
Levithan. Bạn chỉ âần một trình duyệt web hiện đại và một đường truyền internet là có thể sử
dụng nó. RegexPal được viết hoàn toàn bằng JavaScript, do đó nó chỉ hỗ trợ ngôn ngữ
JavasScript.
- RegexPal sẽ tự động tô màu các chuỗi phù hợp với chuỗi biểuthứcchínhquy được nhập ở ô
phía trên. Nếu bạn nhập một cú pháp sai thì RegexPal sẽ tô sáng những phần sai đó. RegexPal là
công cụ tôi thường sử dụng khi viết các chương trình trên .Net để kiểm tra biểuthứcchínhquy
của mình. Bạn có thể sử dụng và tìm hiểu thêm về RegexPal tại: http://regexpal.com/
3.3 Một vài công cụ kiểm tra biểuthứcchínhquy online khác (More online Regex Testers)
4
Để tạo một công cụ kiểm tra biểuthứcchínhquy online là một điều không quá khó. Nếu bạn có
một kiến thức về phát triển web và những kiến thức về regular expression cần thiết thì bạn có thể
tự tạo cho mình một trang như RegexPal kể trên. Và có hàng trăm người đã làm sẵn nó cho bạn.
Sau đây là một số trang điển hình:
- http://regex.larsolavtorvik.com/: Hỗ trợ PHP PCRE, PHP POSIX và JavaScript.
- http://www.nregex.com/ : hỗ trợ các ngôn ngữ .NET được phát triển bởi David Seruyange.
5
- http://www.rubular.com/: được xây dựng bởi tác giả Micheal Lovitt.
6
- http://www.myregexp.com : là một Java applet chạy trên trình duyệt web (yêu cầu cài đặt Java
trình duyệt). Trang này sử dụng thư viện java.until.regex để hỗ trợ. Do đó những biểuthức chính
quy được tạo ở trang này hoàn toàn phù hợp với Java.
7
3.4 Một vài ứng dụng kiểm tra biểuthứcchínhquy offline (More Desktop Regular Expression
Tester)
a. Expresso
- Expresso là một ứng dụng .NET để tạo và kiểm tra biểuthứcchính quy. Bạn có thể download
Expresso tại http://www.ultrapico.com/Expresso.htm. Yêu cầu cài đặt .NET framework 2.0 hoặc
các phiên bản mới hơn để chạy Expresso.
- Đây là một phần mềm tính phí (60 ngày sử dụng miễn phí). Ta có thể đăng ký bản quyền miễn
phí Expresso tại http://www.ultrapico.com/App/Register.aspx bằng cách nhập email vào form
giống như bên dưới. Sẽ có key đăng ký tự động gởi tới mail của bạn.
8
- Giao diện chương trình như sau:
9
b. Regulator:
- Regulator là một ứng dụng .NET dùng để tạo và kiểm tra biểuthứcchínhquy (regular
expression). Giao diện chương trình như sau:
c. PowerGREP
- PowerGREP là ứng dụng được phát triển bởi Jan Goyvaerts. Là một ứng dụng cho Windows.
PowerGREP có giao diện như sau:
10
[...]... biên tập văn bản hỗ trợ biểu thứcchínhquy (Popular Text Editors) • Boxer Text Editor (PCRE) • Dreamweaver (JavaScript) • EditPad Pro (custom flavor that combines the best of the flavors discussed in this book; labeled “JGsoft” in RegexBuddy) • Multi-Edit (PCRE, if you select the “Perl” option) • NoteTab (PCRE) • UltraEdit (PCRE) • TextMate (Ruby 1.9 [Oniguruma]) • NotePad++ 4 Tàiliệu tham khảo (reference) . thi
các biểu thức chính quy. Nó có bộ biểu thức chính quy cho những ngôn ngữ lập trình khác nhau
như: .NET, Java,… Và cho phép chuyển đổi biểu thức chính quy. 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 số văn bản tìm được với biểu thức chính quy đó không phù hợp… Do
đó dừng vội phát biểu: