Cú pháp hàm preg_replace()
Hàm preg_replace
sử dụng RegExp (xem cách viết biểu thức chính quy RegExp) để tìm kiếm và thay thế chuỗi.
preg_replace($pattern, $replacement,$subject)
Hàm này tìm trong $subject
các chuỗi con phù hợp với mẫu $pattern
là một biểu thức RegExp, thay thế chuỗi tìm thấy bởi $replacement
$pattern
: Biểu thứcRegExp
để tìm kiếm có thể là một chuỗi hoặc một mảng.$subject
: Chuỗi nhập vào để tìm kiếm$replacement
: Giá trị thay thế, có thể là chuỗi hoặc mảng. Nếu $pattern là mảng $replacement là chuỗi thì mọi kết quả tìm kiểm theo $pattern được thay thể bởi $replacement. Nếu cả $pattern, $replacement là mảng thì nó thay thế theo phần tử tương ứng.
$replacement đặc biệt có thể được biểu diễn một cách đặc biệt, nó có thể chứa các tham chiếu dùng để chèn nội dung, tham chiếu có dạng $n
với n = 0 - 99
.
Với $0
tương ứng với sự phù hợp với toàn bộ $pattern
, $1, $2 ...
tương ứng với mẫu con theo thứ tự trong $pattern
(Xem ví dụ 2)
Hàm preg_replace
trả về chuỗi hoặc mảng các chuỗi để tìm kiếm và thay thế.
Ví dụ hàm preg_replace()
Ví dụ 1 về preg_replace
Dùng biểu thức chính quy và hàm preg_replace tìm các cụm số
thay thế bằng 2000
<?php $str = "Ví dụ về hàm preg_replace 21321 878"; $newstr = preg_replace("/[0-9]+/", "2000", $str); print $newstr; ?> //OUT: Ví dụ về hàm preg_replace 2000 2000
Ví dụ 2 $replacement đặc biệt
Ví dụ sau, cho chuỗi có nội dung: 'Tháng ... Năm ....'
đảo thành 'Năm ..., Tháng ...'
<?php $string = 'Tháng 12 Năm 2017'; $pattern = '/(\w+) (\d+) (\w+) (\d+)/iu'; $replacement = '$3 $4, $1 $2'; echo preg_replace($pattern, $replacement, $string); ?> //OUT:Năm 2017, Tháng 12
Với ví dụ trên về $pattern
cờ ui
cho biết không phân biệt chữ hoa, chữ thường và dùng chuỗi Unicode.
Với mẫu này trong nó có các $pattern
con là (\w+)
tương ứng với $1
, (\d+)
tương ứng với $2
...Và $replacement
sử dụng các chỉ số này để tạo chuỗi thay thế.
Ví dụ 3 dùng preg_replace với mảng xử lý BBCODE
Ví dụ sau sẽ chuyển các mã bbcode: b, i, u, img, url
thành mã HTML thông thường.
<?php function bbcode2Html($str) { $search = array( '/\[b\](.*?)\[\/b\]/isu', '/\[i\](.*?)\[\/i\]/isu', '/\[u\](.*?)\[\/u\]/isu', '/\[img\](.*?)\[\/img\]/isu', '/\[url\](.*?)\[\/url\]/isu', '/\[url\=(.*?)\](.*?)\[\/url\]/isu' ); $replace = array( '<strong>$1</strong>', '<em>$1</em>', '<u>$1</u>', '<img src="$1" />', '<a href="$1">$1</a>', '<a href="$1">$2</a>' ); $str = preg_replace ($search, $replace, $str); return $str; } //Test $bbcdoe = '[url=https://xuanthulab.net][b]xuanthulab.net[/b][/url]'; echo bbcode2Html($bbcdoe); //OUT HTML: <a href="https://xuanthulab.net"><strong>xuanthulab.net</strong></a>