By GokiSoft.Com| 11:42 15/06/2020|
Tài Liệu PHP

PHP Regular Expressions - RegExp - Biểu thức chính quy

Regular Expression (Biểu thức chính quy) là gì?

Regular expression là một chuỗi các ký tự tạo thành một mẫu tìm kiếm (search pattern). Khi bạn tìm kiếm dữ liệu trong một văn bản, bạn có thể sử dụng pattern này để mô tả những gì bạn cần tìm kiếm.

Một biểu thức chính quy có thể là một ký tự đơn hoặc một mẫu (pattern) phức tạp hơn.

Biểu thức chính quy được sử dụng để tìm kiếm văn bản và thay thế văn bản.


Cú pháp

Trong PHP, biểu thức chính quy là các chuỗi gồm các dấu phân cách, một mẫu và các biến tố tùy chọn.

$exp = "/w3schools/i";

Trong ví dụ trên, / là dấu phân cách, w3schools là mẫu đang được tìm kiếm, và i là một modifier làm cho trường hợp tìm kiếm case-insensitive (không phân biệt chữ hoa/thường).

Dấu phân cách có thể là bất kỳ ký tự nào mà không phải là chữ cái, số, dấu gạch chéo ngược hoặc dấu cách. Dấu phân cách phổ biến nhất là dấu /, nhưng khi pattern của bạn chứa các dấu gạch chéo / thì bạn có thể chọn dấu phân cách khác như # hoặc ~.


Regular Expression Functions - Hàm về RegExp

PHP cung cấp một loạt các hàm để sử dụng các biểu thức chính quy. Hàm preg_match()preg_match_all() và preg_replace() là một số trong những hàm thường sử dụng:

FunctionDescription
preg_match()Trả về 1 nếu pattern được tìm thấy trong chuỗi và 0 nếu không thấy
preg_match_all()Trả về số lần pattern được tìm thấy trong chuỗi, cũng có thể là 0
preg_replace()Trả về chuỗi mới thay thế chuỗi cũ mà khớp với pattern

preg_match()

Hàm preg_match() sẽ cho biết một chuỗi có khớp với pattern không.

Ví dụ

Sử dụng biểu thức chính quy để thực hiện tìm kiếm không phân biệt chữ hoa chữ thường cho "w3schools" trong chuỗi:

<?php
$str = "Visit W3Schools";
$pattern = "/w3schools/i";
echo preg_match($pattern, $str); // Outputs 1
?>

preg_match_all()

Hàm preg_match() sẽ cho bạn biết có bao nhiêu kết quả khớp với pattern trong một chuỗi.

Ví dụ

Sử dụng biểu thức chính quy để thực hiện đếm số lần xuất hiện của "ain" trong chuỗi, không phân biệt hoa thường:

<?php
$str = "The rain in SPAIN falls mainly on the plains.";
$pattern = "/ain/i";
echo preg_match_all($pattern, $str); // Outputs 4
?>

preg_replace()

Hàm preg_match() sẽ thay thế tất cả các kết quả khớp pattern trong một chuỗi bằng một chuỗi khác.

Ví dụ

Sử dụng biểu thức chính quy không phân biệt chữ hoa chữ thường để thay thế Microsoft bằng W3Schools trong một chuỗi:

<?php
$str = "Visit Microsoft!";
$pattern = "/microsoft/i";
echo preg_replace($pattern, "W3Schools", $str); // Outputs "Visit W3Schools!"
?>

Regular Expression Modifiers

Các Modifier có thể thay đổi cách thực hiện tìm kiếm.

ModifierDescription
iThực hiện tìm kiếm không phân biệt chữ hoa chữ thường
mThực hiện tìm kiếm nhiều dòng (các pattern tìm kiếm ở đầu hoặc cuối chuỗi sẽ khớp với đầu hoặc cuối của mỗi dòng)
uCho phép khớp chính xác patterns được mã hóa UTF-8

Regular Expression Patterns

Ngoặc vuông được sử dụng để tìm một phạm vi các ký tự:

ExpressionDescription
[abc]Tìm ký tự có trong dấu ngoặc
[^abc]Tìm ký tự khác với các ký tự trong ngoặc
[0-9]Tìm một ký tự số phạm vi từ 0 đến 9

Metacharacters

Metacharacters là những ký tự có ý nghĩa đặc biệt:

MetacharacterMô tả
|Tìm một kết quả khớp bất kỳ một trong các pattern được phân tách bằng dấu thẳng đứng "|" như: cat|dog|fish
.Chỉ tìm một trường hợp của bất kỳ ký tự
^Tìm một kết quả khớp mà là bắt đầu của một chuỗi, vd: ^Hello
$Tìm một kết quả khớp ở cuối chuỗi, vd: World$
\dTìm một số
\sTìm ký tự khoảng trắng (dấu cách - space)
\bTìm kết quả khớp ở đầu từ word: \bWORD, hoặc cuối từ word như sau: WORD\b
\uxxxxTìm ký tự Unicode được chỉ định bởi số thập lục phân - hexa xxxx

Quantifiers

Quantifiers xác định số lượng:

QuantifierDescription
n+Khớp với bất kỳ chuỗi nào chứa ít nhất một n
n*Khớp với bất kỳ chuỗi nào không chứa hoặc nhiều lần xuất hiện của n
n?Khớp với bất kỳ chuỗi nào không chứa hoặc một lần xuất hiện của n
n{x}Khớp với bất kỳ chuỗi nào chứa n x lần đầu tiên
n{x,y}Khớp bất kỳ chuỗi nào chứa n X đến Y lần đầu tiên
n{x,}Khớp với bất kỳ chuỗi nào chứa n từ x lần trở đi
Note: Nếu biểu thức của bạn cần tìm kiếm một trong các ký tự đặc biệt, bạn có thể sử dụng dấu gạch chéo ngược (\) để dùng chúng theo đúng nghĩa đen. Ví dụ: để tìm kiếm một hoặc nhiều dấu hỏi, bạn có thể sử dụng biểu thức sau: $pattern = '/\?+/';

Grouping - Phân nhóm

Bạn có thể sử dụng dấu ngoặc đơn ( ) để áp dụng quantifiers cho toàn bộ các pattern. Chúng cũng có thể được sử dụng để chọn các phần của pattern để sử dụng như một phần tìm kiếm nhỏ.

Ví dụ

Sử dụng grouping để tìm kiếm từ "banana" bằng cách tìm kiếm ba và theo sau bởi hai trường hợp na:

<?php
$str = "Apples and bananas.";
$pattern = "/ba(na){2}/i";
echo preg_match($pattern, $str); // Outputs 1
?>