Si se trata de cadenas que tienen un número múltiple partes, no es tan fácil de resolver con expresiones regulares, ya que puede tener números desbordados de una parte numérica a otra.
Por ejemplo, si tiene un número INV00-10-99
que debería incrementarse a INV00-11-00
.
terminé con lo siguiente:
for ($i = strlen($string) - 1; $i >= 0; $i--) {
if (is_numeric($string[$i])) {
$most_significant_number = $i;
if ($string[$i] < 9) {
$string[$i] = $string[$i] + 1;
break;
}
// The number was a 9, set it to zero and continue.
$string[$i] = 0;
}
}
// If the most significant number was set to a zero it has overflowed so we
// need to prefix it with a '1'.
if ($string[$most_significant_number] === '0') {
$string = substr_replace($string, '1', $most_significant_number, 0);
}
+1 prefiero éste. –
¿Qué sucede si tengo una cadena como "XXX-342"? será en $ matches [0] o $ matches [1]? – tampe125
@codaddict: ¿No crees que la devolución de llamada es un "pequeño" sobrecarga? ¿Por qué no usas '' 1' regular? – zerkms