views:

22

answers:

1

Getting frustrated...

So, I want to modify the back reference of a preg_replace. Figured I can't actually modify (?) so am wondering if it's possible to change the regex to achieve same result.

Example. Match [xx_xx] and output "xx_xx" and "xx xx". The "xx_xx" is straightforward (as follows) but the "xx xx" ?

$y = "this [fishing_rod] is bent";
echo preg_replace("/\[(.+?)\]/", "\"\\1\", $y);
// this fishing_rod is bent

How do I achieve : this fishing_rod fishing rod is bent ?

(this is just an example, what I'm doing it is more complex !)

+1  A: 

You need to use preg_replace_callback function

function fun($matches) {
        return str_replace('_',' ',$matches[1]); 
}

$y = "this [fishing_rod] is bent";
echo preg_replace_callback("/\[(.+?)\]/","fun", $y);
codaddict
Perfect. One day I'm just going to read every page in the PHP manual. Not knowing what you don't know sucks. Thanks.
Bob
@Bob: **Not knowing what you don't know sucks** Good one ^^
codaddict