Báo cáo Phương pháp xây dựng phần mềm Regular expression giới thiệu đến các bạn những nội dung về regular expression, khái niệm regular expression, cú pháp regular expression, group và lookaround,... Với các bạn đang học chuyên ngành Công nghệ thông tin thì đây là tài liệu tham khảo hữu ích.
Trang 1BÁO CÁO MÔN: PH ƯƠ NG PHÁP XÂY D NG PH N M M Ự Ầ Ề
CH Đ : REGULAR EXPRESSION Ủ Ề Thành viên nhóm:
Vũ Công T nhị
Hà H i Hùngả Nghiêm Xuân S nơ
I- Gi i thi u Regular Expressionớ ệ
Trong cu c s ng h ng ngày, con ngộ ố ằ ười chúng ta di n đ t m t ý ni m hay m t vi cễ ạ ộ ệ ộ ệ làm qua l i nói, c ch hay b ng ch vi t. B i vì con ngờ ử ỉ ằ ữ ế ở ười chúng ta có 5 giác quan khác nhau và nh ng giác quan đó giúp chúng ta hi u đữ ể ược v n đ qua s nhìn, ấ ề ự nghe, ng i, n m, c m th y. Nói m t cách t ng quát, trong xã h i văn minh thì ử ế ả ấ ộ ổ ộ chúng ta làm vi c và ti p xúc v i nhau qua cách dùng ngôn ng Nh ngệ ế ớ ữ ư ười Vi t ệ thì dùng ti ng Vi t đ trao đ i tin t c hay di n đ t m t v n đ Nh ng máy tính ế ệ ể ổ ứ ễ ạ ộ ấ ề ư thì không có nh ng giác quan nh con ngữ ư ười chúng ta, v y làm sao chúng ta có th ậ ể trao đ i thông tin v i vi tính m t cách đ n gi n nh ng hi u qu ? ổ ớ ộ ơ ả ư ệ ả
Theo toán h c, thành ng là m t t p h p c a ch vi t. M i ch vi t bao g m m t ọ ữ ộ ậ ợ ủ ữ ế ỗ ữ ế ồ ộ chu i ký t xác đ nh (a language is a set of finite string; a string is a finite sequence ỗ ự ị
of symbols Appel 1998). Cho nên n u con ngế ười có th di n t m t t p h p ch ể ễ ả ộ ậ ợ ữ
vi t b ng m t phế ằ ộ ương pháp nào đó thì nó tương đương v i vi c di n t m t thànhớ ệ ễ ả ộ
ng ữ
C u trúc đ i di n hay Regular Expression (Regex) là m t d ng vi t ng n g n đ ấ ạ ệ ộ ạ ế ắ ọ ể
mô t m t t p h p ch vi t và có th t m d ch là m t phả ộ ậ ợ ữ ế ể ạ ị ộ ương pháp dùng đ mô tể ả hay di n đ t thành ng m t cách ng n g n và hi u qu Ví d nh đ di n t m tễ ạ ữ ộ ắ ọ ệ ả ụ ư ể ễ ả ộ
t p h p ch ch ch a nh ng ch cái và ch ch cái mà thôi (a set of string contains ậ ợ ữ ỉ ứ ữ ữ ỉ ữ only alphabet), thì Regex có th di n t câu nói trên ng n g n nh sau: [azAZ]*ể ễ ả ắ ọ ư II- Khái ni m c b nệ ơ ả
- Toán t “or”: ử Được ngăn cách b i d u “|”. Ví d : ở ấ ụ ktmpk10b|ktpmk10a thì c ả
ktpmk10b và ktpmk10a đ u h p l ề ợ ệ
- Nhóm: S d ng d u ngo c đ n “(” và “)” đ nhóm các nhóm trong Regex ử ụ ấ ặ ơ ể
nh m xác đ nh ph m vi và khai thác d li u.ằ ị ạ ữ ệ
Ví d : ụ k10aktmpm|k10bktpm và k10(a|b)ktpm là 2 Regex tương đương nhau đ uề
mô t 2 l a ch n ả ự ọ k10aktpm và k10bktpm.
Trang 2- Đ nh lị ượng: Đượ ử ục s d ng đ đ nh nghĩa s lể ị ố ượng c a 1 thành ph n ho c 1 ủ ầ ặ nhóm v m c đ thề ứ ộ ường xuyên mà thành ph n đó x y ra, thầ ả ường g p nh t là ặ ấ
d u h i ch m, d u c ng và d u sao.ấ ỏ ấ ấ ộ ấ
D u ?: Cho bi t thành ph n đó có th xu t hi n 1 l n ho c không xu t ấ ế ầ ể ấ ệ ầ ặ ấ
hi n. Ví d : ệ ụ k10b?ktpm , nh v y d u ? theo sau ký t “ư ậ ấ ự a” nên “a” có th cóể
ho c không.ặ
D u *: Cho bi t thành ph n có th không xu t hi n ho c xu t hi n nhi u ấ ế ầ ể ấ ệ ặ ấ ệ ề
l n. Ví d : ab*c, các giá tr h p l s là: ac, abc, abbc, abbbc,…ầ ụ ị ợ ệ ẽ
D u +: Tấ ương t nh d u *, tuy nhiên thành ph n ph i xu t hi n ít nh t 1 ự ư ấ ầ ả ấ ệ ấ
l n. Ví d : ab*c thì các giá tr h p l : abc, abbc, abbbc.ầ ụ ị ợ ệ {n}: Thành ph n đ ng trầ ứ ướ ặ ạc l p l i n l n. Ví d : a{3}b, thì giá tr h p l ầ ụ ị ợ ệ
s là: aaabẽ {min,}: Thành ph n đ ng trầ ứ ướ ặ ạ ốc l p l i t i thi u min l n. Ví d : a{3,}b thì ể ầ ụ giá tr h p l s là: aaab, aaaab, aaaaab,…ị ợ ệ ẽ
{min,max}: Thành ph n đ ng trầ ứ ướ ặc l p trong kho ng t min t i max. Ví ả ừ ớ
d : a{2,4}, thì giá tr h p l là: aab, aaab, aaaab.ụ ị ợ ệ
1. Cú pháp c b n trong Regexơ ả
H p l v i các ký t đ n b t k ( tr các dòng m i trong 1 s ng ợ ệ ớ ự ơ ấ ỳ ừ ớ ố ứ
d ng). Ví d : a.b thì các giá tr h p l là: aab, acb, adb, axb, a2b,…ụ ụ ị ợ ệ
Tuy nhiên [a.b] thì s đẽ ược hi u là: “a” ho c “.” ho c “b”ể ặ ặ
[ ] Là m t bi u th c h p l v i các ký t đ n ch a trong d u ngo c ộ ể ứ ợ ệ ớ ự ơ ứ ấ ặ
vuông []
Ví d : [abc] h p l v i: ho c a, ho c b, ho c c. ụ ợ ệ ớ ặ ặ ặ
[az] s d ng xác đ nh ph m vi các ký t t a đ n z. Tử ụ ị ạ ự ừ ế ương t [09] ự
ph m vi ký t s t 0 đ n 9. Chúng ta có th s d ng k t h p nh ạ ự ố ừ ế ể ử ụ ế ợ ư
[abcxz] đúng v i "a", "b", "c", "x", "y", ho c "z", đo n regex kia cũng ớ ặ ạ
có th vi t g n h n là [acxz].ể ế ọ ơ
[^ ] Phép ph đ nh trong Regex. Ví d : [^abc] h p l khi các ký t đó ủ ị ụ ợ ệ ự
không ph i là a, b ho c c.ả ặ
^ Regex này l y v trí h p l t đ u dòng trong 1 chu i.ấ ị ợ ệ ừ ầ ỗ
$ H p l v i v trí cu i cùng c a 1 chu i.ợ ệ ớ ị ố ủ ỗ
( ) Đượ ử ục s d ng đ đ nh nghĩa m t expression con hay còn g i là nhóm ể ị ộ ọ
Trang 3ho c 1 kh i, có th s d ng đ g i l i khi c n.ặ ố ể ử ụ ể ọ ạ ầ
* Cho bi t thành ph n có th không xu t hi n ho c xu t hi n nhi u ế ầ ể ấ ệ ặ ấ ệ ề
l n. Ví d : ab*c, các giá tr h p l s là: ac, abc, abbc, abbbc,…ầ ụ ị ợ ệ ẽ
{min,max} Thành ph n đ ng trầ ứ ướ ặc l p trong kho ng t min t i max. Ví d : ả ừ ớ ụ
a{2,4}, thì giá tr h p l là: aab, aaab, aaaab.ị ợ ệ
Ví d :ụ
.at: Các t có 3 ký t theo sau là “at”. H p l : cat, mat, hat, bat, tat,…ừ ự ợ ệ [hc]at: H p l hat ho c cat. Có th s d ng hat|cat cũng có ý nghĩa tợ ệ ặ ể ử ụ ương
t ự [^b]at: T t c các t 3 ký t theo sau là “at” ngo i tr “bat”, vì trong ngo c ấ ả ừ ự ạ ừ ặ vuông lo i ký t b.ạ ự
[^hc]at: T t c các t 3 ký t theo sau là “at” ngo i tr “hat” và “cat”.ấ ả ừ ự ạ ừ
^[hc]at: H p l v i “hat” và “cat” n u t đó b t đ u đ u dòng, các t ợ ệ ớ ế ừ ắ ầ ở ầ ừ không b t đ u đ u dòng không h p l ắ ầ ở ầ ợ ệ
t.*: H p l v i các t b t đ u b i ch t, theo sau có th là b t k ký t đ nợ ệ ớ ừ ắ ầ ở ữ ể ấ ỳ ự ơ nào ho c không có. Ví d : t, ti, tinh,… ặ ụ
2. Các l p ký tớ ự
tươ ng
đương( n
u có) ế
Mô tả
[AZaz] \a Ch ký t ch cái hoa và thỉ ự ữ ường. Ví d : ụ
t\at, thì các t h p l : tat, tbt, tAt, tct, tdt,ừ ợ ệ
… [AZaz09] Ch cái và ch s Ví d : KTPMK[AZaữ ữ ố ụ
z09]
Các giá tr h p l : KTPM1, KTPMA, ị ợ ệ KTPM9, KTPMB
[AZaz09_] \w Ch cái, ch s và d u g ch dữ ữ ố ấ ạ ưới
[^AZaz09_] \W Không là ký t ch cái, ch s , d u g chự ữ ữ ố ấ ạ
dưới [\t\r\n\v\f \s Kho ng tr ngả ắ
Trang 4[^ \t\r\n\v\f] \S Không ph i kho ng tr ngả ả ắ
[AZ] \u Ch cái hoaữ
[AFaf09] \x Ch s h 16ữ ố ệ
\character Các ký t đ c bi t khi s d ng ph i thêmự ặ ệ ử ụ ả
ký t \ vào trự ước
Ví d : \@, \?, \\, \/,…ụ
3. Group và Lookaround
( ) Đ nhóm các expression trong Regex chúng ta s d ng cú pháp ể ử ụ
“( )”, đ t các thành ph n mu n nhóm vào trong ngo c tròn.ặ ầ ố ặ
Ví d : (ti)+, các giá tr h p l : tin, tinh, tinhh,…ụ ị ợ ệ (?:abc) Nhóm nhi u mã v i nhau mà không c n t o 1 nhóm đ g p.ề ớ ầ ạ ể ộ
Ví d : (?:abc)+ thì các giá tr h p l : abc,abcabcabc , abcabc, ụ ị ợ ệ abcabcabc,… v i abc l p liên t c.ớ ặ ụ
(?=abc) Position Lookahead. Ki m tra đi u ki n phía sau c a Regex, lúc ể ề ệ ở ủ
này con tr đ t đ u regex( phía trỏ ặ ầ ước abc c a 1 chu i).ủ ỗ
Ví d :L y ph n đ u c a Gmail ụ ấ ầ ầ ủ /[^\s]+(?=@gmail\.com)/
H p l : vucongtinh@gmail.comợ ệ Không h p l : vucongtinh@yahoo.comợ ệ (?!abc) Negative Lookahead: Ngượ ạ ớc l i v i (?=abc), n u b n mu n tìm ế ạ ố
ph n đ u c a email không ph i c a Gmail thì b n dung nh ví d ầ ầ ủ ả ủ ạ ư ụ trên s d ng (?!)ử ụ
(?<=abc) Position Lookahind: Ngượ ạ ớc l i v i (?=abc), Lookahind ki m tra ể
đi u ki n phía trề ệ ở ướ ủc c a Regex
Ví d : L y username t URL c a 1 tài kho n Facebookụ ấ ừ ủ ả Chu i: https://www.facebook.com/vucongtinhỗ
Regex: /(?<=facebook.com\/)(\w*)/
(?<!abc) Negative Lookahind: Ngượ ạ ớc l i v i (?<=abc), (?<!abc) s ki m traẽ ể
n u đi u ki n phía trế ề ệ ước Regex là sai
IV- Ứng d ng Regexụ
Regex đượ ức ng d ng trong các ngôn ng l p trình đ th c hi n m t nhi m v nh t đ nh:ụ ữ ậ ể ự ệ ộ ệ ụ ấ ị
Ki m tra d li u đ u vào, l y d li u t 1 chu i, tìm ki m d li u,…ể ữ ệ ầ ấ ữ ệ ừ ỗ ế ữ ệ
Trang 5M t s ng d ng trong l p trình web:ộ ố ứ ụ ậ
Trong HTML5, các th input đẻ ược b sung thêm thu c tính pattern nh m đ a Regex vào ổ ộ ằ ư
đ ki m tra d li u vào.ể ể ữ ệ
Ví d :ụ
- Ki m tra m t kh u ph i ít nh t 6 ký t b t kể ậ ẩ ả ấ ự ấ ỳ
<form action="vctinh.php">
Password: <input type="password" name="pw" pattern=".{6,}" title=”Ít nh t ấ
6 ký t "> ự
<input type="submit">
</form>
- Ki m tra Email h p lể ợ ệ
<form action="vctinh.php">
Email: <input type="email" name="email" pattern="[az09._%+]+@[az09.]+\.[az] {2,3}$">
<input type="submit">
</form>
2 Trong Javascript
Đ s d ng Regex trong Javascript các b n có th s d ng 2 ph ể ử ụ ạ ể ử ụ ươ ng th c cho string: search() ứ
và replace() đ tìm và thay th ể ế
Ho c s d ng test() và exec() cho các đ i tặ ử ụ ố ượng
- Ki m tra Email ể
Var email=”vucongtinh@gmail.com”;
Var rex= ”/[az09._%+]+@[az09.]+\.[az]{2,3}$/” ;
If(Rex.test(email)) alert(‘Valid email’);
Else alert(‘Invalid email’);
Trang 63. Trong PHP
Đ th c thi Regex trong PHP có th d ng 1 s hàm: preg_match(), preg_match_all(), ể ự ể ụ ố preg_replace(), preg_grep(), preg_split()
Ví d : L y ph n đ u c a Gmailụ ấ ầ ầ ủ
$email=”vucongtinh@gmail.com”;
If(preg_match(“/^(\w+)(?=\@gmail.com)/”,$email,$matchs)){
Echo $matchs[1];
}
Else echo “Invalid email”;
Trường h p trên $matchs là m ng k t qu tr v ợ ả ế ả ả ề