
Gi i thi u v bi u th c chính quy – 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 c chí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 u th c chính quy (regular expressionị ể ứ
defined)
Bi u th c chính quyể ứ (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 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ữ ậ cũng h tr bi u th c chính quyỗ ợ ể ứ
trong vi c x lý chu i, ch ng h n nh C#, ệ ử ỗ ẳ ạ ư Perl có b máy m nh m đ x lý bi u th c chínhộ ạ ẽ ể ử ể ứ
quy đ 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 u th 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 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 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 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: “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 uụ ạ ả ộ ế ứ ừ ơ ả ế ề ữ ể
th 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 u th c chính quy 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ử ụ ữ ậ
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 u th c chính quy (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ính quy 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
- 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 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 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 u th c chính quy c a b n, vàẽ ự ộ ữ ầ ợ ớ ể ứ ủ ạ
thông báo nh ng l i xu t hi n trong bi u th c chính quy (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 u th c chí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 u th c chính quy.ượ ậ ớ ể ứ
•Split: S lý các bi u th c chính quy 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 u th c chínhữ ơ ố ượ ủ ạ ượ ấ ằ ử ụ ể ứ
quy c a b n.ủ ạ
•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 u th c chínhả ộ ự ộ ồ ộ ạ ổ ấ ứ ể ứ
quy.
•Copy button: đ a bi u th c chính quy đ 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 u th c chính quy 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 u th c chính quy đ 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 uụ ườ ử ụ ế ươ ể ể ể
th c chính quy 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 u th c chính quy online khác (More online Regex Testers)ộ ụ ể ể ứ

Đ t o m t công c ki m tra bi u th c chính quy 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. ỗ ợ ữ ượ ể ở