/ Gists / PCRE - subroutine vs backreference
On gists

PCRE - subroutine vs backreference

PHP

index.php Raw #

<?php

$regex1 = '/(\d+) \1/';     // Backreference
$regex2 = '/(\d+) (?1)/';   // Subroutine

100 100 // ✅ only backreference
100 200 // ✅ both!


// https://github.com/Hamz-a/php-regex-best-practices/blob/master/07%20Writing%20modular%20regexes.md

// named subroutines
$regex = '/(?<number>\d+),(?&number)/';   // Named subroutine

// advanced 
$regex = <<<'regex'
~
(?(DEFINE)
   (?<id>\d+)
   (?<username>user(?&id))
   (?<protocol>https?|ftp)
   (?<domain>example[.]com)
   (?<url>(?&protocol)://(?&domain)/users/(?&id)/(?&username)/?)
)

^(?&url)$   # Anchor our match
~x
regex;