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;