Replace a string that matches a pattern using preg_replace_callback

60 Views Asked by At

I want to replace the occurrences of the pattern "binary_function([x,y])" with substring "XY" in a given string.

I have it working with the following code:

// $string is the string to be searched
$string = preg_replace_callback('/binary_function\(\[(\S),(\S)\]\)/', function ($word) {
        $result = strtoupper($word[1]) . strtoupper($word[2]);              
        return $result;
        }, $string);

However, I also want it to replace "binary_function([x1,y1])" with substring "X1Y1", and any length of the arguments inside the square brackets e.g. [x11,y12], [var1,var2], etc.

I tried this:

// $string is the string to be searched
$string = preg_replace_callback('/binary_function\(\[(\S+),(\S+)\]\)/', function ($word) {
        $result = strtoupper($word[1]) . strtoupper($word[2]);              
        return $result;
        }, $string);

but it did not work.

Can anyone please help here?

Thanks.

1

There are 1 best solutions below

1
On BEST ANSWER

You can use

'/binary_function\(\[([^][\s,]+),([^][\s,]+)]\)/'

See the regex demo

Regex details

  • binary_function\(\[ - a binary_function([ text
  • ([^][\s,]+) - Group 1: any one or more (due to +) chars other than ], [, whitespace and ,
  • , - a comma
  • ([^][\s,]+) - Group 2: any one or more (due to +) chars other than ], [, whitespace and ,
  • ]\) - a ]) string.