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 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. ượ
- http://www.rubular.com/: đ c xây d ng b i tác gi Micheal Lovitt. ượ