การใช้กลุ่มจับใน preg_replace บน PHP
เมื่อทำงานกับฟังก์ชัน preg_replace,
ถ้าเราใส่บางอย่างลงในกลุ่มจับใน Regular Expression,
ในสตริงแทนที่เราสามารถแทรกเนื้อหาของ
กลุ่มจับนั้นได้โดยเขียนเครื่องหมายดอลลาร์ $ และหมายเลข
กลุ่มจับ ตัวอย่างเช่น $0 - กลุ่มจับที่ 0,
$1 - กลุ่มจับแรก, $2 - กลุ่มจับที่สอง
และต่อๆ ไป
เพื่ออะไรและจะใช้มันอย่างไร ลองดูตัวอย่าง
ตัวอย่าง
ลองหาเลขทั้งหมดและแทนที่ด้วย ตัวเลขเดียวกันนั้น แต่อยู่ในวงเล็บปีกกา โดย ตัวเลขทั้งหมดที่พบเราจะแทนที่ด้วย ตัวมันเอง แต่ในวงเล็บปีกกา:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
ผลลัพธ์ในตัวแปรจะเป็นดังนี้:
'{1} {23} {456} xax'
ตัวอย่าง
ลองหาสตริงทั้งหมดที่แทน
ตัวเลขที่มี 'x' รอบๆ และแทนที่
ตัวเลขเหล่านั้นด้วยตัวมันเอง แต่มีเครื่องหมาย '!' รอบ:
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
ผลลัพธ์ในตัวแปรจะเป็นดังนี้:
'!1! !23! !456! xax'
ตัวอย่าง
ลองแก้ปัญหาต่อไปนี้: มีสตริง
รูปแบบ 'aaa@bbb' - ตัวอักษร จากนั้นเครื่องหมาย @,
จากนั้นตัวอักษร ต้องสลับตัวอักษร
ก่อน '@' และหลัง มาทำกัน:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
ผลลัพธ์ในตัวแปรจะเป็นดังนี้:
'bbb@aaa ddd@ccc'
โจทย์ฝึกปฏิบัติ
กำหนดสตริง:
<?php
$str = '12 34 56 78';
?>
สลับตำแหน่งตัวเลขในตัวเลขสองหลักทั้งหมด
กำหนดสตริงวันที่:
<?php
$str = '31.12.2025';
?>
แปลงวันที่นี้เป็น '2025.12.31'