Hiện tại, vì công việc quá bận rộn nên mình không còn thời gian để post bài và duy trì nội dung cho blog nữa. Do đó tại thời điểm này, mình quyết định ngừng phát triển blog. Mọi bài viết sẽ vẫn được lưu trữ và mình sẽ cố gắng hỗ trợ tất cả các bạn khi có comment hỏi. Cảm ơn các bạn đã ủng hộ blog suốt thời gian qua !
Biểu thức chính qui (Regular Expression) là một cách mạnh mẽ dùng cho việc kiểm tra và chỉnh sửa text. Chúng cho phép chúng ta tìm kiếm mẫu (pattern) của một chuỗi , trích xuất các mục tương ứng một cách linh họat và chính xác. Mặc dầu là một công cụ mạnh mẽ nhưng lại chậm hơn sơ với thao tác xử lý chuỗi thông thường. Chính vì thế bạn chỉ sử dụng khi không cần sử dụng nhiều dòng lệnh phức tạp.
Ví dụ như: ‘\b[A-Z0-9._%+-]+@[A-ZO-9.-]+\.[A-Z]{2,4}\b’ đây là một mẫu dùng để mô tả địa chỉ email.
Cấu trúc cơ bản của biểu thức chính qui
Đầu tiên, chúng ta xét 2 ký hiệu đặc biệt là ‘^’ và ‘$’. Chúng chỉ định điểm bắt đầu và kết thúc của một chuỗi, ví dụ như:
“^The” đối với bất kỳ chuỗi bắt đầu với “The”
“of depairse” đối một chuỗi cái mà kết thúc trong chuỗi con “of despair”.
“^abc$” một chuỗi bắt đầu và kết thúc với “abc” – điều này bản thân nó chỉ chứa “abc”
“notice” một chuỗi có ký tự “notice” trong đó.
Bạn có thấy rằng nếu bạn không sử một trong một trong hai đặc điểm chúng tôi đã đề cập, như ví dụ cuối cùng, bạn đang nói rằng các mô hình có thể xảy ra bất cứ nơi nào trong chuỗi – bạn không thể “mốc nối” nó với bất cứ bên nào
Ngoài ra còn có các kỳ hiệu ‘*’, ‘+’ và ‘?’ cái mà biểu thị số lần một ký tự hoặc một chuỗi các ký tự có thể xuất hiện. Cái này nghĩa là “không hoặc hơn” và “không hoặc một”. Đây là một số ví dụ:
“ab*“: đối với một chuỗi theo sau bởi không hoặc hơn những ký tự ‘b’ (“a”, “ab”, “abbb”, vv);
“ab+“: tương tự, nhưng có ít nhất một ‘b’ (“ab” “abbb”, vv)’
“ab?“: có thề có một b hoặc không;
“a?b+$“: rất có thể theo sau bởi một hoặc nhiểu b kết thúc của một chuỗi.
Bạn cũng có thể sử dụng giới hạn, cái mà bên trong dấu ngoặc và chỉ ra những dãy trong mộr số lần thức hiện:
“ab{2}: đối với một chuỗi cái mà tiếp theo bởi chính xác 2 ‘b’ (“abb”);
“ab{2,}: có ít nhất 2 ký tự b (“abb” “abbbb”, vv);
“ab{3,5}: từ ba đền năm ký tự b (“abbb”, “abbbb”, “abbbbb”)
Lưu ý rằng: bạn phải luôn xác định số đầu tiên của một lọat (tức là “{0,2}, không {,2}). Ngoài ra, như bạn có thể thấy rằng. những ký hiệu ‘*’. ‘+’ và ‘?’ có tác dụng tương tự như sử dụng các giới hạn tương ứng “{0}”. “{1,}”, và “{1,2}.
Bây giờ, để xác định một chuỗi các ký tự, đặt chúng trong dấu ngoặc đơn:
“a*(bc)” đối một chuỗi rằng theo sau một hoặc hơn bản copy của chuỗi “bc”;
“a(bc){1,5}: từ một đến năm bản sao chép của “bc”
Ngoài ra còn có ký hiệu “|”, cái mà làm việc như một biều thức HOẶC (OR):
“hi|hello” đối với một chuỗi rằng có “hi” hoặc “hello” trong nó.
“(b|cd)ef”: một chuỗi rằng có “bef” hoặc “cdef”;
“(a|b)*c”: một chuỗi rằng có một lọat của luân phiên a hoặc b kết thúc trong c.
Một dấu chấm “.” viết tắt của bất cứ một ký tự:
“a.[0-9]”: đối một chuỗi theo sau một ký tự và một chữ số.
“^.{3}$”: một chuỗi với chính xác 3 ký tự.
Biểu thức ngoặc vuông/khung xác định những chuỗi ký tự được cấp phép trong một vị trí duy nhất trong một chuỗi:
“[ab]: đối một chuỗi rằng có một ký tự a hoặc b (đó thì giống như “a|b”);
“[a-d]: một chuỗi rằng các ký từ thường từ a đến d (đó bằng với “a|b|c|d” và ngay cả “[abcd]”);
“^[a-zA-Z]”: một chuỗi bắt đầu với một ký tự.
“[0-9]%”: một chuỗi có một ký số trước một dấu %.
“,[a-zA-Z0-9]$”: một chuỗi kết thúc bằng dấu phẩy theo sau là một ký tự chữ và số.
Bạn cũng có thể liệt kê các ký tự bạn khong muốn – chỉ cần sử dụng “^” như là ký hiệu trong một biểu thức khung (tức là “%[^a-zA-Z]% đối vói một chuỗi với một ký tự cái mà không có một ký tự và nằm chính giữa hai dấu phần trăm).
Mục đích là sử dụng các ký tự đặc biệt “^/[$()|*+>{\“, bạn phải kèm theo dấu “\” khi nó mang ý nghĩa đặc biệt. Ngay từ đầu, bạn phải thóat (escape) dấu chéo ngược bản thân nó trong chuỗi PHP4, vì vậy, ví dụ biếu thức chính qui “(\$|¥)[0-9]+” sẽ có chức năng gọi: ereg(“(\\$|¥)[0-9]+”,$str) (đó là một chuỗi xác thực?)
Chỉ cần dừng quên biều thức khung là một ngoại lệ – trong đó, tất cả ký tự đặc biệt, bao gồm cả dấy sổ ngược (‘\’), mất đi khả năng đặc biệt củ nó (ví dụ, “[*\+>{}.]” đối chính xác bất kỳ của những ký tự bên trong dấu ngoặc). Và như nhưng trang regex man cho ta biết: “để có một chữ ‘]’ trong danh sách, làm cho nó những ký tự đâu tiên (sau một ‘^’). Đề chứa một ký tự ‘-’, tạo nó ký tự đầu hoặc kết, hoặc điểm kết thứ hai của một dãy.
(Sưu tầm)