REGULAR EXPRESSION PHP
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Các quy tắc Regular Expression căn bản

Ta có thể hiểu nôm na rằng Regular Expression hoạt động theo kiểu so khớp và trả về kết quả giống nhau của sự so khớp đó. Ví dụ bạn làm bánh thì cái khuông chính là biểu thức Regular Expression còn còn bánh được làm ra chính là sản phẩm của sự so khớp giữa bột vài cái khuông.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trước tiên để dễ hiểu ta quy định một số danh từ nhé.

  • pattern: được gọi là chuỗi Regular Expression (biểu thức chính quy)
  • subject: chuỗi so khớp với pattern
  • matches: kết qua so khớp

Đây chính là ba tham số của hàm preg_match mà ở bài trước ta đã tìm hiểu.

1. Khai báo chuỗi RegEx

Để khai báo một chuỗi Regular Expression ta chỉ cần khai báo bắt đầu bằng ký tự / và kết thúc cũng là ký tự /.

Bài viết này được đăng tại [free tuts .net]

Ví dụ:

// Partern kiểm tra trong subject có tồn tại chuỗi abc không
$pattern = '/abc/';
$subject = 'abc';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Trong ví dụ này chuỗi $pattern = '/abc/' có ý nghĩa là tìm trong chuỗi $subject xem có tồn tại chuỗi abc không. Vì $subject = 'abc' nên kết quả hàm preg_match trả về kết quả đúng.

Giả sử giờ tôi thay đổi giá trị của $subject như sau thì theo bạn kết quả trả về đúng hay sai nhé:

// Partern kiểm tra trong subject có tồn tại chuỗi abc không
$pattern = '/abc/';
$subject = 'mabcd';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Kết quả trả về vẫn là đúng tại vì trong $subject tuy có giá trị là mabcd nhưng tách nhỏ ra thì nó tồn tại chuỗi abc nên kết quả so khớp là đúng.

2. Ký tự bắt đầu và kết thúc RegEx

Trong lập trình để kiểm tra hai biến có chính xác bằng nhau hay không thì đơn giản ta chỉ cần dùng toán tử so sánh ==. Còn trong Regular Expression có làm được điều này không? Hoàn toàn được nhé các bạn, ta sẽ dùng ký tự bắt đầu ^ và ký tự kết thúc $ đặt vào đầu và cuối chuỗi $pattern, như vậy khi so khớp sẽ so sánh từ đầu đến cuối, tức là so sánh khớp hoàn toàn.

Ví dụ:

// Partern kiểm tra trong subject co bang freetuts khong
$pattern = '/^freetuts$/';
$subject = 'freetuts';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Trong ví dụ này chuỗi $pattern = '/^freetuts$/' sẽ kiểm tra xem chuỗi $subject có bằng freetuts.net không, vì $subject = 'freetuts' nên kết quả trả về là đúng. Giả sử giờ bạn thay đổi biến $subject = 'sfreetutsd' thì kết quả sẽ sai, tại vì $subject tuy xuất hiện chữ freetuts nhưng ký tự bắt đầu lại là chữ s chứ không phải chứ f và ký tự kết thúc là chữ d chứ không phải chữ s.

Nếu tới đây bạn vẫn chưa hiểu thì tôi giải thích tiếp như sau, chuỗi $pattern = '/^freetuts$/' có ý nghĩa rằng:

  • Ký tự thứ 1 là chữ f và là ký tự bắt đầu chuỗi
  • Ký tự thứ 2 phải là chữ r
  • ký tự thứ 3 phải là chữ e
  • ...
  • ký tự thứ 7 phải là chữ t
  • ký tự thứ 8 phải là chữ s và là ký tự kết thúc chuỗi

3. RegEx phạm vi của chuỗi

Giả sử cần kiểm tra một chuỗi có phải là chữ cái in thường hay không thì ta sẽ dùng ký hiệu [min-max], trong đó min là ký tự bắt đầu, max là ký tự kết thúc. Hoặc [list_char] trong đó list_char là danh sách các ký tự cho phép.

Sau đây là các ví dụ cách sử dụng phạm vi của chuỗi Regular Expression.

Regex kiểm tra có phải chữ cái in thường

// Pattern là chữ cái từ a -> z
$pattern = '/[a-z]/';
$subject = 'd';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Regex kiểm tra một chữ cái in hoa

// Pattern là chữ cái từ A -> Z
$partern = '/[A-Z]/';
$subject = 'd';
if (preg_match($partern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Regex kiểm tra một ký tự là chữ số

// Pattern là chữ cái từ 0 -> 9
$pattern = '/[0-9]/';
$subject = 'd';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Regex kiểm một chữ cái in hoa hoặc in thường

// Partern là ký tự in hoa hoặc in thường
$partern = '/[a-zA-Z]/';
$subject = 'f';
// $subject = 'F';
if (preg_match($partern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Regex kiểm tra một ký tự là số, chữ cái in hoa hoặc in thường

// Pattern là số, ký tự in hoa hoặc in thường
$pattern = '/[a-zA-Z0-9]/';
$subject = 'f';
//$subject = 'F';
//$subject = '9';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Regex kiểm tra ký tự có nằm trong dãy không

// Pattern là chữ a hoặc số 2 hoặc chữ b
$pattern = '/[a2b]/';
$subject = 'a';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Trong ví dụ này ta không sử dụng cú pháp [min, max] để định nghĩa nên Regular Expression sẽ hiểu là một trong các ký tự, tức là nếu:

  • $subject có chứa ký tự a
  • $subject có chứa ký tự 2
  • $subject có chứa ký tự b

thì regex sẽ trả về đúng.

4. Xác định chiều dài của chuỗi Regex

Để xác định chiều dài của chuỗi pattern Regex ta dùng ký hiệu {min,max}, trong đó min là chiều dài tối thiểu và max là chiều dài tối đa.

Regex kiểm tra là chữ in thường dài từ 5 đến 10 ký tự

$pattern = '/^[a-z]{5,10}$/';
$subject = 'fdsfdsa';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Trong ví dụ này chạy lên kết quả sẽ trả về đúng. Tuy nhiên nếu bạn đổi giá trị biến $subject = 'a' thì kết quả sẽ trả về sai tại vì chiều dài chuỗi $subject chỉ bằng 1.

Regex kiểm tra là chữ số dài 3 đến 10 ký tự.

// Pattern là chữ số từ 3 đến 10 ký tự
$pattern = '/^[0-9]{3,10}$/';
$subject = '3232';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Regex kiểm tra chuỗi có độ dài chính xác

Giả sử ta có bài toán kiểm tra một chuỗi có phải là chữ in thường dài 5 ký tự không? Ta có 2 cách để xử lý vấn đề này:

Cách 1: dùng cách thông thường $partern = '/^[a-z]{5,5}$/'

// Pattern là chữ thường dài 5 ký tự
$pattern = '/^[a-z]{5,5}$/';
$subject = 'sssss';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Cách 2: Ta dùng cú pháp bình thường nhưng bớt đi một biến.

// Pattern là chữ thường dài 5 ký tự
$pattern = '/^[a-z]{5}$/';
$subject = 'sssss';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

5. Lời kết

Trong bài này chúng ta đã tìm hiểu được một số biểu thức quan trọng trước khi vào học nâng cao, những biểu thức này đang chỉ ở mức căn bản nhưng nó là tiền đề để bạn hiểu và kết hợp với những kiến thức nâng cao mà mình sắp trình bày ở các bài tiếp theo.

Danh sách file tải về

Tên file tải về Pass giải nén
Tải bài học định dạng PDF freetuts.net hoặc gameportable.net

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top