<?php

$re = <<<'EOF'
/(?J)
(?&R)\K\s*(?<sign>[=+*-])\s*(?=(?&R))
|
(?&R)\s*\K\s*(?<sign>=)\s*(?=-(?&R))

(?(DEFINE)
(?<R>(?<!\w) ( (?:f|r|s) (?:1[0-5]|[0-9]) | CI | 1)))/mix
EOF;

$str = <<<'EOF'
s3=f2+f5*f8+f9      # Should match all the = + - and *
foo=f5+bar*f7+f8+f9 # Should only match the last two '+'

SUBSTITUTION

f5=f5 + f6
f5=f5-f6
f5=f5+f6+CI-1
f4=-r4
f8=(f3+f3)/2
456e-3+5
EOF;

# echo $re."\n";

# echo $str."\n";

# echo "---"."\n";


function my_replace($matches) {
    return ' ' . $matches['sign']. ' ';
}
echo $output = preg_replace_callback($re, 'my_replace', $str);

?>

