$re = '/\b(?<number>[\d,]+(?:\.\d+)?)(?<space> ?|&[^;]{2,7};)(?<dimensions>(?:(?<mathjax>\$[^\n\$]+\$)|(?<unit>(?:Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)?(?:m|g|s|A|K|mol|cd|Hz|N|Pa|J|W|C|V|F|Ω|S|Wb|T|H|lm|lx|Bq|Gy|Sv|kat|l|L))))/m';
$str = '30 $m^2$
4,000 km
';
$subst = "$<number> $<dimensions>";
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php