Named regex matches in php

by Ade Attwood
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

Named regex matches in php

The Last Show and Tell: Anna Peskova

It is our designer Anna’s last week here at Practically, and she was made to do a show and tell of her time with us. We thought it was rather cool that, firstly, she created it as a web page, and secondly the way she represented her time here. Enjoy!