- preg_match_all: documentation ( source)
<?php
$re = '/^{map:\h+geo="(?P<lat>-?\d+(?:\.\d+)?)(?:,\d+)?,(?P<lon>-?\d+(?:\.\d+)?)(?:,\d+)?"[^}]+}/';
$str = '{map: geo="20.471884,-157.505,6" p="Hawaii"}';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
$lat = $matches[0]["lat"];
$lon = $matches[0]["lon"];
echo $lat;
echo PHP_EOL;
echo $lon;