กลุ่มจับชื่อภายใน Regex ของ PHP
จำได้ไหมว่าเราใช้กลุ่มจับใน นิพจน์ทั่วไปได้อย่างไร:
<?php
$res = preg_replace('#([a-z])\1#', '!', $str);
?>
บางครั้งมีสถานการณ์ที่สะดวกกว่าในการอ้างอิง ถึงกลุ่มจับไม่ใช่ด้วยหมายเลขของมัน แต่ด้วยชื่อ สำหรับ สิ่งนี้เราจำเป็นต้องตั้งชื่อให้กับกลุ่มจับ:
<?php
$res = preg_replace('#(?<letter>[a-z])#', '!', $str);
?>
ตอนนี้เราสามารถอ้างอิงถึงกลุ่มจับนี้
ผ่านไวยากรณ์ \k<name> ได้ดังนี้:
<?php
$res = preg_replace('#(?<letter>[a-z])\k<letter>#', '!', $str);
?>
กลุ่มจับชื่อที่อธิบายไว้ยังมี
ไวยากรณ์ทางเลือกอีกหลายแบบ: (?P=name),
\k'name', \k{name}
กำหนดสตริง:
<?php
$str = '12:59:59 12:59:12 09:45:09';
?>
ค้นหาสตริงย่อยทั้งหมดที่เป็นเวลาซึ่ง ชั่วโมงตรงกับวินาที