Twitter Delicious Facebook Digg Stumbleupon Favorites More

Thứ Năm

REGULAR EXPRESSION TRONG PERL PHP VÀ ỨNG DỤNG CĂN BẢN

2 video tham khảo:
http://www.izwebz.com/video-tutorials/can-ban-php-bai-11-phan-1/

http://www.izwebz.com/video-tutorials/can-ban-php-bai-11-phan-2

1. Regular Expression là gì?
 
ĐN: Là hệ thống tìm kiếm text fragment trong tài liệu số dựa trên những bản ghi mẫu. 
[i]Cái định nghĩa này dịch ra tiếng Việt nên nó ko sạch sẽ lắm, FaL sẽ cố gắng làm rõ hơn. 
Để viết regular expression ta cần làm quen với những ký tự có ý nghĩa đặc biệt trong một regular expression - Meta symbols. Những ký tự được liệt kê dưới đây theo format: ký tự - [i]ý nghĩa 

^ - [i]Bắt đầu dòng(string) 
$ - [i]Kết thúc dòng 
. - [i]Đại diện cho một ký tự bất kỳ 
+ - [i]Lặp với số lượng >= 1 
* - [i]Lặp với số lượng bất kỳ (>=0) 
? - [i]Tồn tại hoặc không tồn tại 
\ - [i]Dấu / đi kèm với 1 meta symbol sẽ làm mất ý nghĩa của meta symbol đó - trả về symbol bình thường. 

Ví dụ với những expression sau sẽ có ý nghĩa: 

^a - Bắt đầu của dòng là ký tự a. Dòng này có thể là abcd, aaaa, a4684,.... miến sao bắt đầu bằng ký tự a. 
^string$ - Dòng này mang giá trị cứng là string vì nó bị chặn giữa ^ và $ 
a. - có thể mang giá trị: ab, a1, au, af - nhưng không thể là abc, ab1, vì dấu chi đại diện cho 1 ký tự! 
ax+ - biểu diễn cho dòng: ax, axxxx, axxxx - nhưng không thể là "a" vì + đại diện cho >=1 ký tự. 
ay* - biểu diễn cho dòng: a, ay, ayy, ayyyyyyyyy,.... 
ab? - biểu diễn cho: a, ab (b có thể có hoặc không) 
a\+b - biểu diễn cho dòng: "a+b" 

[i]Làm quen tiếp với một số cách biểu diễn khác: 
\d - Chữ số bất kỳ 
\D - Ký tự bất kỳ không phải là chữ số (ngược với \d) 
\w - Ký tự từ a-z, A-Z, hoặc 0-9 
\W - Ngược lại với \w (nghĩa là các ký tự không thuộc các khoảng: a-z, A-Z, hoặc 0-9) 
\s - Khoảng trắng (space) 
\S - Ký tự bất kỳ không phải là khoảng trắng. 

Thêm một số ví dụ: 
\s+ - [i]Có nghĩa: có >=1 khoảng trắng. 
^\d+ -[i] Bắt đầu là chữ số, và theo sau nó là một số chữ số chưa xác định 

Có vẻ hơi khó hiểu thiệt, tui viết xong đọc lại thấy cũng ... mờ mờ <img src="http://www.hvaonline.net/hvaonline/images/smilies/8f173d0eaffc4b90c0c0361b8f37cc17.gif" alt="smilie" align="absbottom" />. 

2. Tìm kiếm từ với Perl, PHP: 

Trước hết ta làm quen với cách tìm chuỗi con trong câu: 
Perl: 
Syntax: ~// 
$s = "One Two Three" 
Để xác định trong câu này có chuỗi "Two" hay không, ta dùng biểu thức: 

[size=small]Code:

$s=~/Two/;  
Đẳng thức này sẽ trả về 1 nếu trong $s chứa "Two". 

PHP: 
Hàm: preg_match('//',$s) - với , ngược lại sẽ trả về 0. 
[size=small]
preg_match('/Two/', $s);  
Ghi chú: Phân biệt chữ HOA và chữ thường trong lúc tìm kiếm. Để bỏ phân biệt chữ hoa và chữ thường, ta thêm i vào cuối : 
[size=small]
$s=~/two/i;  
---> trả về 1; 
[size=small]
preg_match('/tWo/i', $s);  
---> trả về 1; 

3. Áp dụng Regular Expression vào tìm kiếm + tách từ: 

Cũng với câu $s = "One Two Three", ta tách thành 3 từ "One", "Two", "Three" đơn giản như sau: 
Perl: 
[size=small]
$s=~/^(\w+)\s+(\w+)\s+(\w+)$/;  
Sau lệnh này Perl sẽ trả giá trị vào 3 biến mặc định có tên $1, $2, $3 - cụ thể: $1 = "One", $2 = "Two", $3 = "Three". 

[i]Giải thích cho câu lệnh trên: $s=~/^(\w+)\s+(\w+)\s+(\w+)$/ 
. Ở đây chúng ta có 3 cặp dấu () - 3 cặp dấu này sẽ thông báo cho Perl biết là ta đang tìm 3 từ trong câu. (Bao nhiêu cặp dấu ứng với bấy nhiêu từ). Trong mỗi cặp dấu ta sẽ dùng Regular Expression để định nghĩa từ muốn tìm, cụ thể đơn giản ở đây chỉ là \w+ nghĩa là từ này bao gồm một số (>=1) ký tự nhất định (những ký tự này thuộc a-z, A-Z, 0-9). Giữa các từ là \s+ mang ý nghĩa: "Có một số khoảng trắng ở giữa các từ". 

Với định nghĩa như trên thì nếu: 
[size=small]
$s="One Two Three"  
thì 
[size=small]
$s=~/^(\w+)\s+(\w+)\s+(\w+)$/;  
vẫn trả về 3 biến
$1 = "One", $2 = "Two", $3 = "Three"  
(Vì ta chỉ lấy từ ở trong dấu ngoặc (), những khoảng trắng giữa chúng được bỏ đi) 

PHP: 
Thủ tục: [size=small]
preg_match('/^(\w+)\s+(\w+)\s+(\w+)$/', $s, $a);  
sẽ trả về kết quả 3 từ vào mảng a. Ở đây Regular Expression hoàn toàn giống như với Perl, chỉ khác là thêm $a, để xuất giá trị ra. Kết quả thu được:[size=small]
$a[1]="One"$a[2]="Two"$a[3]="Three"  
[i]
Làm việc với string thường rất vất vả và đòi hỏi độ chính xác cao. với Regular Expression trong Perl, PHP, công việc này được đơn giản đi rất nhiều. 1 dòng code trong Perl, PHP làm việc với string trong trường hợp này có thể sánh với hàng trang code trong các ngôn ngữ khác. 

Ta có thể ứng dụng những đoạn code đơn giản ở trên vào các form đòi hỏi nhập dữ liệu, thông tin người dùng, ... hay dùng để lọc các biến được truyền.


Nguồn: congthuongit.net

0 nhận xét:

Đăng nhận xét

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Blogger Templates