\k<named>
ใน Regular expression ที่ใช้ในฟังก์ชั่น preg ของ PHP ปกติจะสามารถใช้ \1 \2 \3 อะไรงี้ เพื่ออ้างอิงถึงใน ( ) ที่เจอก่อนหน้าได้เลย แต่ถ้าตัว regex มีความซับซ้อนมากๆ จะมานั่งนับกันคงไม่สะดวก ยิ่งถ้ามีการแก้ไข เพิ่ม หรือลด ( ) เข้าไปแล้วละก็ เท่ากับตัวไล่ลำดับ sub pattern กันใหม่
ใน regex ของ PHP เราสามารถตั้งชื่อ sub pattern ได้โดยกำหนดลักษณะนี้
<?php $input_text = '$hash = "6123eac44792571853043a43248e3c93";'. "\n"; preg_match('/(?<var>\$[a-z0-9_]+) = /', $input_text, $matches); print_r($matches);
Output:
Array ( [0] => $hash = [var] => $hash [1] => $hash )
ทีนี้เวลาเราจะ Back references กับ sub-pattern ข้างหน้าที่ชื่อว่า var เราก็สามารถอ้างอิงโดยใช \k<var> แบบนี้
<?php $input_text = '$hash = "6123eac44792571853043a43248e3c93";'. "\n"; $input_text.= 'if (check_hash($hash)) {'; preg_match('/(?<var>\$[a-z0-9_]+) = .*check_hash\(\k<var>\)/ms', $input_text, $matches); print_r($matches);
Output:
Array ( [0] => $hash = "6123eac44792571853043a43248e3c93"; if (check_hash($hash) [var] => $hash [1] => $hash )
อ้างอิง: http://www.rexegg.com/regex-capture.html#namedgroups