Named regex matches in php

by George Cadwallader
When dealing with those pesky regular expressions trying to get our matches by their index, making your code that little less readable.
Jun 11, 2020
When dealing with those pesky regular expressions trying to get our matches by their index, making your code that little less readable. When someone comes to your code we don’t want them requiring a second look to try to understand your pattern. With named matches in your regex, you can give matches a name to describe exactly what you’re matching.

A good example of this is matching parameters in URLs. You can give the variables in your URL a name making your code a bit more readable. In the URL

1
/category/1/post/5

we want to get the category id and the post id. A simple match would be to simply match the digits.

1
^\\/category\\/(\\d+)\\/post\\/(\\d+)$

This would then give you code something like:


1
2
3
4
5
6
$input_line = '/category/1/post/5'
preg_match('/^\\/category\\/(\\d+)\\/post\\/(\\d+)$/', $input_line, $output_array);

if ($output_array[1] === 1 && $output_array[2] === 5) {
    // Do some magic
}

We can give our matches a name by adding a

1
?<name>

to your pattern. So your new pattern will look like:


1
^\\/category\\/(?<category_id>\\d+)\\/post\\/(?<post_id>\\d+)$

Now we can refactor our code to make it that bit more readable:


1
2
3
4
5
6
$input_line = '/category/1/post/5'
preg_match('^\\/category\\/(?<category_id>\\d+)\\/post\\/(?<post_id>\\d+)$', $input_line, $output_array);

if ($output_array['category_id'] === 1 && $output_array['post_id'] === 5) {
    // Do some magic
}

Links to php live regex

More reads

Our inaugural FedEx Day

Our inaugural FedEx Day

We here at Practically took 24 hours out of client work to do our first FedEx day – so called because you deliver something the next day. We wanted to show off the creativity, technical process and breadth of what our small team made.