Pregunta

Estoy teniendo algunos problemas para cocinar una expresión regular que produce este resultado:

Mike 1 , misha 1,2 , Miguel 1,2,3,4,5,6,7,18 y michea 2,3

¿Cómo retroceder un paso en expresiones regulares y deseche el último partido? Eso es lo que necesito una coma antes de un espacio para no coinciden. Esto lo que me ocurrió ...

\d+(,|\r)

Mike 1, misha 1,2, Miguel 1,2,3,4,5,6,7,18, y Micheal 2,3

¿Fue útil?

Solución

La característica de expresiones regulares que estés preguntando por se llama positivo de búsqueda hacia atrás . Pero en su caso, no creo que lo necesite. Prueba esto:

\d+(?:,\d+)*

En el ejemplo, esto va a coincidir con las listas de números delimitados por comas y no incluyen los nombres y las comas finales y espacios en blanco.

Aquí es un poco corta de código de prueba escrita en PHP que lo verifica en su entrada:

<?php
$input = "Mike1, misha1,2, miguel1,2,3,4,5,6,7,18, and Micheal2,3";
$matches = array();
preg_match_all('/\d+(?:,\d+)*/', $input, $matches);
print_r($matches[0]);
?>

salidas:

Array
(
    [0] => 1
    [1] => 1,2
    [2] => 1,2,3,4,5,6,7,18
    [3] => 2,3
)
scroll top