$test="abc123";
//$test="abc123n";
$r = preg_match_all("/.*?(\d+)$/", $test, $matches);
//echo $r;
//print_r($matches);
if($r>0) {
echo $matches[count($matches)-1][0];
}
регулярное выражение объясняется следующим образом:
. *?- это займет все символы в строке от начала до тех пор, пока не будет найдено совпадение для следующей части.
(\ d +) $ - это одна или несколько цифр до концастрока, сгруппированная.
без?в первой части только вторая цифра будет сопоставлена во второй части, потому что все цифры до того, как она будет занята. *