1. Trang chủ
  2. » Công Nghệ Thông Tin

Biểu thức chính quy thư viện hàm biểu thức chính quy trong PHP

13 550 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 32,3 KB

Nội dung

BIỂU THỨC CHÍNH QUY THƯ VIỆN HÀM BIỂU THỨC CHÍNH QUY TRONG PHP Phần 1: Biểu thức chính quy 1.1 Khái niệm Biểu thức chính quy ( regular expression viết tắt là regexp, reges 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. 1.2 Đặc điểm 1.2.1 Ưu điểm  Giúp đơn giản hơn trong lập trình và quá trình xử lý văn bản. ( Thay vì cần đến hàng trăm thủ tục để có thể trích xuất tất cả các địa chỉ email từ một số tài liệu, với regular expression 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.  Giúp tiết kiệm thời gian và công sức 1.2.2 Nhược điểm  Gây 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. 1.3 Lịch sử phát triển Nguồn gốc của biểu thức chính quy nằm ở lý thuyết tự động và lý thuyết ngôn ngữ hình thức, cả hai đều là một phần của khoa học máy tính. Do vậy có thể nói 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). Trong những năm 1950, nhà toán học Stephen Cole Kleene mô tả các mô hình này bằng cách sử dụng các ký hiệu toán học của ông được gọi là tập chính quy. Ngôn ngữ SNOBOL được sử dụng đầu tiên trong việc so khớp mẫu, nhưng nó cũng không giống hoàn toàn với biểu thức chính quy. Sau đó Ken Thompson đã xây dựng các ký hiệu Kleene vào trình soạn thảo QED để so khớp mẫu trong các file văn bản. Sau đó ông thêm khả năng này vào trình soạn thảo Unix, mà cuối cùng đã trở thành công cụ tìm kiếm grep rất phổ biển được sử dụng cho biểu thức chính quy (grep là một từ có nguồn gốc từ những lệnh của biểu thức chính quy tìm kiếm: grep viết tăt cho biểu thức chính quy). Kể từ đó nhiều biến thể của biểu thức chính quy do Thompson đưa ra được sử dụng rộng rãi trong Unix và các hệ Unixlike bao gồm cả expr, AWK, Emacs.. Biểu thức chính quy của Perl và Tcl được bắt nguồn từ thư viện regex viết bởi Henry Spencer, mặc dù sau đó Perl đã mở rộng thư viện này để thêm nhiều tính năng mới. Philip Hazel phát triển PCRE(Perl Compatible Regular Expressions – biểu thức chính quy tương thích Perl), dựa trên biểu thức chính quy của Perl và được sử dụng trong nhiều công cụ hiện đại như PHP và Apache HTTP Server. Một phần của những nổ lực trong việc thiết kế Perl6 là cải thiện, phát triển biểu thức chính quy Perl tích hợp và tăng phạm vi và khả năng để cho phép định nghĩa được các biểu hiện phân tích cú pháp. Kết quả cho ra đời minilanguage gọi là Perl 6 được sử dụng để định nghĩa cú pháp cũng như cung cấp mọt công cụ để lập trình bằng ngôn ngữ. 1.4 Các kiến thức cơ bản về biểu thức chính quy 1.4.1 Khai báo 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. 1.4.2 Cách thức hoạt động của biểu thức chính quy Regex engine là 1 bộ phận của phần mềm, chuyên để xử lý regex (so khớp mẫu với 1 chuỗi nào đó). Có nhiều regex engine và chúng không hoàn toàn tương thích với nhau. Cú pháp regex (flavor) của mỗi engine cũng có sự khác nhau. Chúng ta sẽ tập trung vào cú pháp regex được sử dụng trong Perl 5, vì nó phổ biến nhất. Rất nhiều engine regex khác giống với engine sử dụng trong Perl 5: engine nguồn mở PCRE (sử dụng trong rất nhiều ngôn ngữ lập trình, như PHP), thư viện regex .NET,...

BIỂU THỨC CHÍNH QUY THƯ VIỆN HÀM BIỂU THỨC CHÍNH QUY TRONG PHP Phần 1: Biểu thức quy 1.1 Khái niệm Biểu thức quy ( regular expression viết tắt regexp, reges hay regxp) chuỗi miêu tả chuỗi khác, theo quy tắc cú pháp định 1.2 Đặc điểm 1.2.1 Ưu điểm  Giúp đơn giản lập trình trình xử lý văn ( Thay cần đến hàng trăm thủ tục để trích xuất tất địa email từ số tài liệu, với regular expression cần số dòng lệnh chí dòng lệnh để làm việc  Giúp tiết kiệm thời gian công sức 1.2.2 Nhược điểm  Gây phiền toái không mong muốn như: sử dụng biểu thức quy không phù hợp với biểu thức muốn tìm số văn tìm với biểu thức quy không phù hợp 1.3 Lịch sử phát triển Nguồn gốc biểu thức quy nằm lý thuyết tự động lý thuyết ngôn ngữ hình thức, hai phần khoa học máy tính Do nói thuật ngữ regular expression xuất phát từ lý thuyết toán học khoa học máy tính, phản ánh đặc điểm biểu thức toán học gọi quy (regularity) Trong năm 1950, nhà toán học Stephen Cole Kleene mô tả mô hình cách sử dụng ký hiệu toán học ông gọi tập quy Ngôn ngữ SNOBOL sử dụng việc so khớp mẫu, không giống hoàn toàn với biểu thức quy Sau Ken Thompson xây dựng ký hiệu Kleene vào trình soạn thảo QED để so khớp mẫu file văn Sau ông thêm khả vào trình soạn thảo Unix, mà cuối trở thành công cụ tìm kiếm grep phổ biển sử dụng cho biểu thức quy (grep từ có nguồn gốc từ lệnh biểu thức quy tìm kiếm: g/re/p viết tăt cho biểu thức quy) Kể từ nhiều biến thể biểu thức quy Thompson đưa sử dụng rộng rãi Unix hệ Unix-like bao gồm expr, AWK, Emacs Biểu thức quy Perl Tcl bắt nguồn từ thư viện regex viết Henry Spencer, sau Perl mở rộng thư viện để thêm nhiều tính Philip Hazel phát triển PCRE(Perl Compatible Regular Expressions – biểu thức quy tương thích Perl), dựa biểu thức quy Perl sử dụng nhiều công cụ đại PHP Apache HTTP Server Một phần nổ lực việc thiết kế Perl6 cải thiện, phát triển biểu thức quy Perl tích hợp tăng phạm vi khả phép định nghĩa biểu phân tích cú pháp Kết cho đời mini-language gọi Perl sử dụng để định nghĩa cú pháp cung cấp mọt công cụ để lập trình ngôn ngữ 1.4 Các kiến thức biểu thức quy 1.4.1 Khai báo Regular expression phần ngôn ngữ lập trình thư viện để hoạt động phát triển Sau khai báo sử dụng regular expression ngôn ngữ lớn Java C#: - Với ngôn ngữ Java: using java.util.regex; - Với ngôn ngữ C#: using System.Text.RegularExpressions; Với thư viện khai báo sử dụng Chúng ta thực công việc thông thường regular expression tìm kiếm thay cách xây dựng cú pháp đặc biệt 1.4.2 Cách thức hoạt động biểu thức quy Regex engine phận phần mềm, chuyên để xử lý regex (so khớp mẫu với chuỗi đó) Có nhiều regex engine chúng không hoàn toàn tương thích với Cú pháp regex (flavor) engine có khác Chúng ta tập trung vào cú pháp regex sử dụng Perl 5, phổ biến Rất nhiều engine regex khác giống với engine sử dụng Perl 5: engine nguồn mở PCRE (sử dụng nhiều ngôn ngữ lập trình, PHP), thư viện regex NET, Hiểu cách làm việc regex engine giúp ta viết regex tốt hơn, dễ dàng Nó giúp ta hiểu regex hoạt động không mong muốn, giúp tiết kiệm thời gian phải mò mẫm viết regex phức tạp Có loại regex engine: text-directed engines, regex-directed engines Loại cú pháp regex mà ta thảo luận thuộc loại regex-directed engines Loại engine phổ biến có số chức hữu dụng như: lazy quantifiers, backreferences, Có thể dễ dàng kiểm tra xem loại cú pháp sử dụng thuộc engine qua việc kiểm tra xem lazy quantifiers backreferences có hỗ trợ không Hãy thử dùng biểu thức regex regex|regex not vào chuỗi regex not xem Nếu kết so khớp regex, engine dùng thuộc loại regex-directed Nêu kết regex not, engine thuộc loại text-directed Trong VD tiếp theo, ta phân tích cụ thể cách thức làm việc regex engine, qua giúp sử dụng regex hiệu tránh mắc lỗi Regex-directed engine trả kết so khớp bên trái Thậm chí match tốt tìm thấy tiếp tục so khớp Đây điều cần ghi nhớ Regex-directed engine bắt đầu so khớp với ký tự chuỗi Hãy lấy VD đơn giản để minh hoạ: ta dùng regex cat vào chuỗi He captured a catfish for his cat Engine bắt đầu so khớp dấu regex c với ký tự chuỗi H Không khớp Vì tiếp tục so khớp với ký tự thứ e space Đều không khớp Đến ký tự thứ 4, c khớp với c Xong, engine bắt đầu so khớp dấu hiệu thứ regex a với ký tự thứ chuỗi a Khớp Nhưng đến dấu hiệu thứ regex t không khớp với ký tự thứ chuỗi p Lúc engine ngộ tìm match ký tự thứ chuỗi Vì vậy, bắt đầu lại công việc từ đầu, từ ký tự thứ chuỗi Regex c không khớp với a Cứ tiếp tục ký tự thứ 15 chuỗi, regex c khớp với c Engine so khớp dấu hiệu lại regex với ký tự chuỗi: a khớp a, t khớp t Và match tìm thấy ký tự 15 Engine trả kết ngừng luôn, không tiếp tục tìm xem match tốt không (VD: cat cuối chuỗi) 1.4.3 Ký tự thông thường ký tự đặc biệt a Ký tự thông thường Regex biểu thức bao gồm ký tự thông thường, VD: a Nó so khớp với thực thể ký tự chuỗi VD có chuỗi: LazyDog is a boy, so khớp với ký tự a sau ký tự L Regex so khớp với ký tự a thứ ta điều khiển regex engine tiếp tục tìm kiếm sau so khớp lần Cũng vậy, regex dog so khớp với dog chuỗi LazyDog is not a dog Regex bao gồm sêri ký tự thông thường Engine hiểu biểu thức là: tìm d, theo sau o, theo sau g Chú ý regex engine mặc định phân biệt chữ hoa chữ thường Dog không so khớp với dog b Ký tự đặc biệt Vì ta cần làm nhiều công việc phức tạp tìm kiếm đoạn văn bản, phải trưng dụng vài ký tự để làm nhiệm vụ đặc biệt Trong cú pháp regex thảo luận đây, có 11 ký tự mang ý nghĩa đặc biệt: [ \ ^ $ | ? * + ( ) Chúng gọi metacharacter Nếu cần dùng ký tự với ý nghĩa thông thường, ta phải giải phóng \ VD cần so khớp 1+1=2, regex 1\+1=2 Chú ý 1+1=2 regex đúng, nên không báo lỗi, không cho ta kết mong muốn Regex 1+1=2 so khớp với 111=2 chuỗi 123+111=234, dấu + mang ý nghĩa đặc biệt Nếu ta quên không giải phóng ký tự đặc biệt chỗ không phép đứng gặp lỗi VD: +1 Hầu hết loại cú pháp regex coi { ký tự thông thường, trừ phần toán tử nhắc lại (repetition operator), VD: {1, 3} Vì ta không cần giải phóng ký tự Ta dùng \ để giải phóng ký tự đặc biệt, ký tự khác không nên, \ ký tự đặc biệt \ kết hợp với ký tự thông thường có ý nghĩa đặc biệt, VD: \d so khớp với chữ số từ - Tất loại cú pháp regex cho phép giải phóng ký tự đặc biệt \ Rất nhiều cú pháp khác hỗ trợ kiểu giải phóng \Q \E Tất ký tự nằm cặp \Q \E coi ký tự thông thường VD: \Q*\d+*\E so khớp với đoạn văn *\d+* Kiểu cú pháp hỗ trợ JGsoft engine, Perl, PCRE, 1.4.4 Tìm kiếm theo vị trí Neo đầu cuối chuỗi Mỏ neo không so khớp với ký tự Thay vào đó, chúng so khớp với vị trí trước, sau ký tự Chúng sử dụng để "neo" biểu thức regex vào vị trí để so khớp Dấu ^ khớp với vị trí trước ký tự chuỗi Áp dụng regex ^a cho chuỗi abc, ta a ^b kết so khớp với abc, b không khớp với ký tự sau vị trí bắt đầu chuỗi, vị trí khớp ^ Tương tự trên, $ khớp với vị trí sau ký tự cuối chuỗi c$ khớp với c abc, a$ không khớp Khi sử dụng regex ngôn ngữ lập trình để kiểm định thông tin nhập vào từ người dùng, sử dụng neo quan trọng VD ta dùng \d+ để kiểm tra xem người dùng có nhập vào số nguyên hay không, kết trả chí người dùng nhập qsdf4ghjk, \d+ khớp với Regex phải ^\d+$ Bởi vị trí đầu chuỗi phải khớp trước \d+ khớp, vị trí cuối chuỗi phải khớp sau đó, chuỗi nhập vào muốn khớp với ^\d+$ chuỗi chữ số (dấu + toán tử nhắc lại, dùng để nhắc lại ký tự trước nhiều lần) Một ý khác ta dễ dàng mắc lỗi với ký tự trắng Trong ngôn ngữ Perl chẳng hạn, đọc vào dòng từ file text, ký tự line break lưu vào biến Do trước tiến hành kiểm định thông tin nhập vào, ta cần chặt bỏ ký tự trắng đầu cuối ^\s+ khớp với ký tự trắng đầu \s+$ khớp với ký tự trắng cuối Sử dụng ^ $ để neo đầu cuối dòng Nếu chuỗi cần xử lý viết nhiều dòng, kiểu first line\nsecond line (\n ký tự line break), ta muốn làm việc với dòng với chuỗi Do đó, regex engine thảo luận loạt có thêm chức mở rộng ý nghĩa mỏ neo ^ vừa khớp với vị trí đầu chuỗi (trước ký tự f VD trên), vừa khớp với vị trí sau line break (giữa \n s) Cũng vậy, $ vừa khớp với vị trí cuối chuỗi (sau ký tự e cuối cùng), vừa khớp với vị trí trước line break (giữa e \n) Trong ngôn ngữ lập trình, ta phải kích hoạt chức mở rộng này, gọi chế độ đa dòng (multi-line mode) VD Perl, ta làm việc cách thêm m vào sau đoạn mã regex, VD: m/^regex$/m; Neo đầu cuối chuỗi vĩnh cửu \A khớp với vị trí đầu chuỗi, \Z khớp với vị trí cuối chuỗi Chúng không khớp vị trí line break, chí chế độ "multiline mode" kích hoạt Điều cho tất loại cú pháp regex thảo luận 1.4.5 Các lớp ký tự Sử dụng lớp ký tự, ta khiến regex engine chọn ký tự để so khớp Để sử dụng, ta đặt ký tự cần so khớp vào dấu [ ] VD: để so khớp ký tự a e, ta dùng [ae] Như biểu thức gr[ae]y khớp với gray grey Lớp ký tự so khớp với ký tự đơn Như gr[ae]y không khớp với graay, graey,v.v Thứ tự ký tự lớp không quan trọng Kết trả giống Để xác định vùng ký tự lớp ký tự, ta sử dụng dấu - VD: [0-9] so khớp với chữ số từ - Có thể sử dụng nhiều vùng ký tự kết hợp vùng ký tự với ký tự đơn VD: [09a-fA-F] so khớp với chữ số hệ 16, không phân biệt chữ hoa, thường [0-9a-fxA-FX] so khớp với chữ số hệ 16 chữ X, không phân biệt chữ hoa, thường Cũng trên, thứ tự vùng không quan trọng Lớp ký tự phủ định Đặt dấu ^ sau [ lớp ký tự phủ định lớp ký tự Kết lớp ký tự so khớp với ký tự không nằm lớp ký tự Lớp ký tự phủ định so khớp với ký tự line break Chú ý lớp ký tự phủ định phải so khớp với ký tự VD: q[^u] "q không theo sau u" mà "q theo sau ký tự u" Vì không so khớp với q chuỗi Iraq, so khớp với q space chuỗi Iraq is a country Metacharacter lớp ký tự Trong lớp ký tự, ký tự mang ý nghĩa đặc biệt hay metacharacter bao gồm: ] \ ^ - Các metacharacter nói phần trước đặt lớp ký tự coi ký tự thông thường, không cần phải giải phóng VD: để tìm ký tự * +, ta dùng [+*] Để đặt ký tự \ vào lớp ký tự với nghĩa thông thường, cần giải phóng ký tự \ khác VD: [\\x] khơp với ký tự \ x Các ký tự ] ^ - muốn dùng theo nghĩa thông thường phải giải phóng \ đặt vị trí mà ý nghĩa đặc biệt Ta nên dùng cách thứ để biểu thức regex trông dễ nhìn sau: Với ^, đặt chỗ trừ vị trí sau [ VD: [x^] khớp với x ^ Với ], đặt sau [ [^ VD: []x] khớp với ] x [^]x] khớp với ký tự ] x Với -, đặt sau [ [^ , trước ] VD: [-x] [x-] so khớp với x Có thể sử dụng tất ký tự không in lớp ký tự giống dùng chúng lớp ký tự VD: [$\u20AC] khớp với $ ký tự đồng euro (với giả định cú pháp regex dùng hỗ trợ unicode) JGsoft engine, Perl PCRE hỗ trợ kiểu \Q \E lớp ký tự để giải phóng chuỗi ký tự VD: [\Q[-]\E] khớp với [ - ] Cú pháp regex POSIX lại xử lý \ lớp ký tự ký tự thông thường Đồng nghĩa với việc ta dùng \ để giải phóng ] ^ - Để làm việc ta cách đặt chúng vào vị trí trình bày Ngoài điều đồng nghĩa với việc cú pháp tắt (shorthand, VD: \d) không hiệu lực Lớp ký tự viết tắt (Shorthand Character Classes) \d dạng tắt [0-9] \w gọi "ký tự từ" (word character) Chính xác ký tự khớp với thay đổi tuỳ theo loại cú pháp regex Trong tất loại cú pháp, bao gồm [A-Za-z] Trong hầu hết loại cú pháp, bao gồm dấu _ chữ số \s gọi "ký tự trắng" (whitespace character) Nó khớp với ký tự tùy thuộc vào loại cú pháp Trong kiểu cú pháp thảo luận đây, bao gồm [\t] Nghĩa \s khớp với space tab Trong hầu hết cú pháp , bao gồm ký tự carriage return line feed, nghĩa [\t\r\n] Một số cú pháp khác lại bao gồm thêm ký tự không in dùng vertical tab form feed Các lớp ký tự viết tắt dùng lẫn cặp [] VD: \s\d khớp với ký tự trắng theo sau chữ số [\s\d] khớp với ký tự đơn ký tự trắng chữ số Khi áp dụng vào chuỗi + = 3, regex thứ khớp với (space 2), regex thứ khớp với [\da-fA-F] khớp với chữ số hệ 16, giống [0-9a-fA-F] Lớp ký tự viết tắt phủ định (Negated Shorthand Character Classes) \D tương đương [^\d] \W tương đương [^\w] \S tương đương [^\s] 1.4.6 Biểu thức lặp theo độ dài Biểu thức quy sử dụng ký hiệu + * ? để thể việc lặp ký tự theo độ dài Ký tự * : mang ý nghĩa lặp lại ký tự, nhóm ký tự trước từ đến n lần Ký tự + : mang ý nghĩa lặp lại ký tự, nhóm ký tựn trước từ đến n lần Ký tự ? : mang ý nghĩa lặp lại ký tự, nhóm ký tự trước lần Ngoài biểu thức quy cho phép quy định biểu thức lặp lại xác số lần {x}: Mang ý nghĩa lặp lại ký tự, nhóm ký tự trước x lần {x,y}: Mang ý nghĩa lặp lại ký tự, nhóm ký tự trước từ x đến y lần {x,}: Mang ý nghĩa lặp lại ký tự, nhóm ký tự trước lớn x lần 1.4.7 Phân nhóm Biểu thức quy sử dụng ký tự mở ngoặc tròn ( đóng ngoặc tròn ) để phân nhóm ký tự Ví dụ /([a-z0-9]+)@([a-z]+)/ : biểu diễn biểu thức quy so khớp với chuỗi ký tự gồm ký tự từ a đến z từ đến nhóm đứng liền lặp lại lần theo sau ký tự @ nhóm ký tự từ a đến z lặp lại lần Phần 2: Thư viện biểu thức quy ngôn ngữ lập trình PHP 2.1 Thư viện PCRE l(Perl-Compatible Regular Expressions) PCRE viết tắt cho Perl-Compatible Regular Expressions Đây tên thư viện mã nguồn mở viết ngôn ngữ C Phillip Hazel Thư viện tương thích với hầu hết trình biên dịch C hệ điều hành Nhiều người phát triển thưc viện từ PCRE làm cho tương thích với ngôn ngữ lập trình khác Ví dụ số Delphi component đơn giản hàm bao quanh thư viện PCRE biên dịch thành thư việ Win32 DLL Thư viện bao gồm nhiều phiên Linux chia sẻ thư viện so file h Các hàm preg PHP lớp REALbasic Regex xây dựng dựa PCRE PCRE thực gần cú pháp biểu thức quy Perl 5.8, có hỗ trợ thuộc tính Unicode với \p không đầy đủ hầu hết phần quan trọng hỗ trợ Sử dụng PCRE đơn giản Trước sử dụng biểu thức quy cần chuyển đổi sang định dạng nhị phân để cải thiện hiệu Để làm điều cần phải gọi hàm pcre_complie() Hàm trả trỏ đến định dạng nhị phân Bạn làm điều với kết ngoại trừ việc sử dụng để thực hàm pcre khác Để sử dụng biểu thức quy, hàm pcre_exec() sử dụng trỏ trả với hàm pcre_complie(), mảng ký tự mà bạn muốn tìm kiếm số ký tự tỏng mảng Bạn cần phải sử dụng trỏ để xác định mảng số nguyên nơi mà hàm pcre_exec() lưu trữ kết quả, chiều dài mảng số nguyên Chiều dài mảng phải số lượng nhóm mà bạn muốn hỗ trợ cộng thêm sau nhân Hàm trả -1 không tìm thấy kết quả, ngược lại trả số lượng nhóm thỏa mãn cộng với Nếu số lượng thỏa mãn nhiều kích thước mảng kết trả Hai số nguyên mảng chứa vị trí bắt đầu biểu thức tìm thấy số byte biểu thức tìm thấy Các cặp số nghuyên chứa vị trí bắt đầu chiều dài tham chiếu ngược Vì array[n*2] vị trí bắt đầu chuỗi thỏa mãn biểu thức quy array[n*2+1] độ dài tương ứng chuỗi Thư viện PCRE hỗ trợ regex phù hợp, công việc làm tốt không cung cấp, hỗ trợ cho việc tìm kiếm thay hay chia tách chuỗi….Tuy nhiên vấn đề lớn bạn dễ dàng làm điều qua việc viết code 2.2 Các nhóm hàm regular expression PHP 2.2.1 Tập hàm preg Tất hàm preg yêu cầu bạn phải đặc tả biểu thức quy chuỗi sử dụng cú pháp Perl Trong Perl, /regex/ định nghĩa biểu thức quy Trong PHP, trở thành preg_match(‘/regex/’,$subject) Dấu ‘/’ để nhận biết biểu thức quy, biểu thức quy cần có dấu ‘/’ phải thêm ‘\’ đằng trước Ví dụ: http://dantri.com.vn -> biểu thức quy phải viết là: ‘/http:\/\/dantri.com.vn/’ Không giống C# hay Java, PHP không yêu cầu loại bỏ toàn ‘\’ chuỗi biểu thức Nếu muốn thêm dấu ‘\’ ký tự xâu PHP, bạn cần loại bỏ nó theo sau ký tự khác, mà cần loại bỏ Trong xâu bao bọc dấu nháy đơn, ký tự nháy đơn ‘\’ cần loại bỏ Dó lý biểu thức quy đây, không cần phải dùng ‘\\’ để nhận biết dấu chấm (.) Để xác định chuỗi ‘\\’ php biểu thức quy phải viết ‘/\\\\/’ Một vài option biểu thức quy: /regix/x x=i ->Không phân biệt chữ hoa, chữ thường x=s -> lấy tất ký tự số giá trị khác u,m,x sử dụng a Hàm preg_match bool preg_match(string pattern, string subject [, array groups]) Hàm return true biểu thức quy pattern matches với chuỗi subject Mảng groups dùng để lưu lại chuỗi tìm thấy b Hàm preg_match_all Int pareg_match_all(string pattern, string subject, array matches, int flags) Hàm lấy toàn chuỗi với biểu thức quy chuối subject Tất chuỗi tìm thấy lưu mảng matches xếp truyền thêm biến flag c Hàm preg_grep Array preg_grep (string pattern, array subjects) Hàm trả mảng chứa tất string mảng subjects mà tìm thấy, so khớp với biểu thức quy pattern d Hàm preg_repalce Mixed preg_replace (mixed pattern, mixed replacement, mixed subject [, int limit]) Hàm trả string với tất chuỗi tìm thấy, so khớp với biểu thức quy pattern thay bới chuỗi replacement e Hàm preg_ repalce _callback preg_replace_callback (mixed pattern, callback replacement,mixed subject[,int limit]) Hàm hoạt động giống hàm preg_replace khác tham số thứ Hàm preg_regplace thay đoạn ký tự so khớp với pattern replacement hàm preg_replace_callback thay thay chuỗi replacement so khớp chuỗi ký tự thỏa mãn pattern gọi hàm callback repacement Hàm callback gọi biểu thức quy so khớp đúng, tham số hàm callback mảng hoạc chuỗi Callbacks cho phép bạn làm tìm kiếm mạnh mẽ thay hoạt động mà bạn làm với biểu thức thông thường Ví dụ: bạn tìm kiếm cho regex(\ d +) \ + (\ d +), bạn thay +3 với cách sử dụng Callback: function regexadd($groups) { return $groups[1] + $groups[2]; } f Hàm preg_split Array preg_split (string pattern, string subject [, int limit]) Hàm thực việc phân chia chuỗi subject thành chuỗi thỏa mãn so khớp với patterm trả mảng chuỗi phân tách 2.2.2 Tập hàm ereg Các hàm ereg yêu cầu bạn xác định biểu thức quy chuỗi, bạn mong muốn ereg ('regex', "subject") kiểm tra regex phù hợp với subject Bạn nên sử dụng dấu nháy đơn viết biểu thức quy chuỗi ký tự Một số ký tự đặc biệt dấu $ dấu gạch chéo ngược \ ký tự đặc biệt chuỗi PHP, chuỗi trích dẫn PHP Các hàm ereg không hỗ trợ phiên sau PHP 5.3.0 Các hàm preg khuyến cáo chạy nhanh so với hàm ereg a Hàm ereg int ereg (string pattern, string subject [, array groups]) Hàm ereg trả độ dài chuỗi so khớp với pattern subject b Hàm ereg_replace string ereg_replace (string pattern, string replacement, string subject) Hàm thay tất đoạn ký tự thỏa mãn biểu thức quy pattern chuỗi replacement chuỗi subject c Hàm split array split (string pattern, string subject [, int limit]) Hàm chia chuỗi subject thành mảng chuỗi thỏa mãn biểu thức quy pattern 2.2.3 Tập hàm mb_ereg Tập hàm mb_ereg làm việc giống hoàn toàn với thàm ereg khác điểm là: Các hàm ereg thao tác so khớp biể thức quy chuỗi tạo nên từ ký tự bit, hàm mb_ereg làm việc với ký tự nhiều byte ví dụ ký tự tiếng Trung quốc tạo từ byte [...]... pattern trong subject b Hàm ereg_replace string ereg_replace (string pattern, string replacement, string subject) Hàm thay thế tất cả các đoạn ký tự thỏa mãn biểu thức chính quy pattern bằng chuỗi replacement trong chuỗi subject c Hàm split array split (string pattern, string subject [, int limit]) Hàm chia chuỗi subject thành mảng các chuỗi thỏa mãn biểu thức chính quy pattern 2.2.3 Tập các hàm mb_ereg... viết một biểu thức chính quy như là một chuỗi ký tự Một số ký tự đặc biệt như dấu $ và dấu gạch chéo ngược \ là ký tự đặc biệt trong chuỗi PHP, nhưng không phải trong một chuỗi trích dẫn PHP Các hàm ereg không còn được hỗ trợ ở các phiên bản sau của PHP 5.3.0 Các hàm preg được khuyến cáo chạy nhanh hơn so với các hàm ereg a Hàm ereg int ereg (string pattern, string subject [, array groups]) Hàm ereg... matches, int flags) Hàm này sẽ lấy toàn bộ các chuỗi đúng với biểu thức chính quy của chuối subject Tất cả các chuỗi con tìm thấy lưu trong mảng matches và có thể được sắp xếp nếu truyền thêm biến flag c Hàm preg_grep Array preg_grep (string pattern, array subjects) Hàm trả về 1 mảng chứa tất cả string trong mảng subjects mà có thể được tìm thấy, so khớp với biểu thức chính quy pattern d Hàm preg_repalce... hàm preg_replace_callback thay vì thay thế bằng chuỗi replacement thì mỗi khi so khớp được chuỗi ký tự thỏa mãn pattern nó sẽ gọi hàm callback repacement Hàm callback sẽ được gọi mỗi khi biểu thức chính quy được so khớp đúng, tham số của hàm callback có thể là một mảng hoạc các chuỗi Callbacks cho phép bạn làm tìm kiếm mạnh mẽ và thay thế các hoạt động mà bạn không thể làm với các biểu thức thông thư ng... replacement, mixed subject [, int limit]) Hàm trả về 1 string với tất cả các chuỗi được tìm thấy, so khớp đúng với biểu thức chính quy pattern được thay thế bới chuỗi replacement e Hàm preg_ repalce _callback preg_replace_callback (mixed pattern, callback replacement,mixed subject[,int limit]) Hàm hoạt động giống hàm preg_replace nhưng khác ở tham số thứ 2 Hàm preg_regplace sẽ thay thế đoạn ký tự được... regexadd($groups) { return $groups[1] + $groups[2]; } f Hàm preg_split Array preg_split (string pattern, string subject [, int limit]) Hàm thực hiện việc phân chia chuỗi subject thành các chuỗi thỏa mãn được so khớp đúng với patterm và trả về một mảng các chuỗi phân tách được 2.2.2 Tập các hàm ereg Các hàm ereg yêu cầu bạn xác định biểu thức chính quy như một chuỗi, như bạn mong muốn ereg ('regex', "subject")... subject thành mảng các chuỗi thỏa mãn biểu thức chính quy pattern 2.2.3 Tập các hàm mb_ereg Tập các hàm mb_ereg làm việc giống hoàn toàn với các thàm ereg chỉ khác ở một điểm duy nhất đó là: Các hàm ereg chỉ thao tác so khớp biể thức chính quy và các chuỗi được tạo nên từ các ký tự 8 bit, trong khi các hàm mb_ereg có thể làm việc với các ký tự nhiều hơn 1 byte ví dụ như các ký tự tiếng Trung quốc được

Ngày đăng: 11/06/2016, 15:08

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w