You can use the \K
feature:
$str = preg_replace('~\A.{2,}?\K[0-9]+~', '', $str);
Where \K
removes all on the left from match result.
Since .{2,}?
is a lazy quantifier, the fewest characters (but at least 2) are matched until a digit is found. It can be replaced by a greedy version with: ..[^0-9]*
If you want to deal with this kind of string: ABC123XYZ999
to obtain ABCXYZ
:
$str = preg_replace('~(?:\A..|(?!\A)\G)[^0-9]*\K[0-9]+~', '', $str);
\G
is an anchor for the end of the last match.