Các nhóm bắt (capture groups) trong thay thế bằng biểu thức chính quy trên PHP
Khi làm việc với hàm preg_replace,
nếu chúng ta đặt gì đó vào một nhóm bắt trong biểu thức chính quy,
thì trong chuỗi thay thế chúng ta có thể chèn nội dung
của nhóm bắt đó bằng cách viết dấu đô la $ và số thứ tự
của nhóm bắt. Ví dụ: $0 - nhóm bắt số 0,
$1 - nhóm bắt thứ nhất, $2 - nhóm bắt thứ hai
và cứ tiếp tục như vậy.
Hãy cùng xem xét các ví dụ để biết nó cần thiết cho việc gì và cách sử dụng nó như thế nào.
Ví dụ
Hãy tìm tất cả các số và thay chúng bằng chính các số đó, nhưng được đặt trong dấu ngoặc nhọn. Để làm điều này, chúng ta sẽ thay thế tất cả các số tìm được bằng chính chúng, nhưng trong dấu ngoặc nhọn:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
Kết quả, biến sẽ ghi lại giá trị sau:
'{1} {23} {456} xax'
Ví dụ
Hãy tìm tất cả các chuỗi, biểu diễn
các số được bao quanh bởi chữ 'x' và thay thế các
số đó bằng chính chúng, nhưng được bao quanh bởi dấu '!':
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
Kết quả, biến sẽ ghi lại giá trị sau:
'!1! !23! !456! xax'
Ví dụ
Hãy giải quyết bài toán sau: cho các chuỗi
dạng 'aaa@bbb' - các chữ cái, sau đó là dấu @,
tiếp theo là các chữ cái. Cần hoán đổi vị trí các chữ cái
trước '@' và sau. Hãy thực hiện:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
Kết quả, biến sẽ ghi lại giá trị sau:
'bbb@aaa ddd@ccc'
Bài tập thực hành
Cho chuỗi:
<?php
$str = '12 34 56 78';
?>
Hãy hoán đổi các chữ số trong tất cả các số có hai chữ số.
Cho một chuỗi chứa ngày tháng:
<?php
$str = '31.12.2025';
?>
Hãy chuyển đổi ngày tháng này thành dạng '2025.12.31'.