php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #81469 preg_replace(): add support for named capture groups
Submitted: 2021-09-23 13:01 UTC Modified: 2021-09-24 05:29 UTC
From: wim at squeezely dot tech Assigned:
Status: Closed Package: PCRE related
PHP Version: Irrelevant OS:
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: wim at squeezely dot tech
New email:
PHP Version: OS:

 

 [2021-09-23 13:01 UTC] wim at squeezely dot tech
Description:
------------
Would it be possible to add support for named capture groups to preg_replace()?

php > var_dump(preg_replace('/([a-z]+)$/', 'ice-cream-with-${1}', 'I-like-chocolate-sprinkles'));

string(41) "I-like-chocolate-ice-cream-with-sprinkles"


Add support for:
var_dump(preg_replace('/(?<namedGroup>[a-z]+)$/', 'ice-cream-with-${namedGroup}', 'I-like-chocolate-sprinkles'));

Test script:
---------------
php > var_dump(preg_replace('/(?<namedGroup>[a-z]+)$/', 'ice-cream-with-${namedGroup}', 'I-like-chocolate-sprinkles'));

Expected result:
----------------
string(41) "I-like-chocolate-ice-cream-with-sprinkles"

Actual result:
--------------
string(45) "I-like-chocolate-ice-cream-with-${namedGroup}"

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2021-09-23 15:57 UTC] nikic@php.net
TBH I don't think this is worthwhile anymore at this point. With preg_replace_callback you can do:

preg_replace_callback('/(?<namedGroup>[a-z]+)$/', fn($m) => "ice-cream-with-$m[namedGroup]", 'I-like-chocolate-sprinkles'));

Which is not much worse than dedicated syntax, and gives you the full generality of PHP without any questions about edge-case behavior.
 [2021-09-24 05:29 UTC] wim at squeezely dot tech
-Status: Open +Status: Closed
 [2021-09-24 05:29 UTC] wim at squeezely dot tech
Okay, I'll use preg_replace_callback instead. I just thought it would be nice if preg_replace() would support the capabilities of regex completely. But it makes sense to spend time on other things.

Thanks!
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Sun Apr 27 21:01:26 2025 UTC