/ / PHP Regex solo para enteros: php, regex, preg-match

PHP Regex solo para enteros - php, regex, preg-match

Estoy tratando de obtener el número entero a la izquierda y a la derecha para una entrada desde el $str variable usando REGEX. Pero sigo recibiendo las comas junto con el número entero. Solo quiero enteros, no las comas. También he intentado reemplazar el comodín . con d pero aún no hay resolución.

$str = "1,2,3,4,5,6";

function pagination()
{
global $str;
// Using number 4 as an input from the string
preg_match("/(.{2})(4)(.{2})/", $str, $matches);
echo $matches[0]."n".$matches[1]."n".$matches[1]."n".$matches[1]."n";
}

pagination();

Respuestas

0 para la respuesta № 1

Creo que estás buscando Regex Non Capture Group

Esto es lo que hice:

$regStr = "1,2,3,4,5,6";
$regex = "/(d)(?:,)(4)(?:,)(d)/";

preg_match($regex, $regStr, $results);
print_r($results);

Me da los resultados:

Array ( [0] => 3,4,5 [1] => 3 [2] => 4 [3] => 5 )

¡Espero que esto ayude!


0 para la respuesta № 2

Dado el nombre de su función, voy a suponer que necesita esto para la paginación.

La siguiente solución podría ser más fácil:

$str = "1,2,3,4,5,6,7,8,9,10";
$str_parts = explode(",", $str);

// reset and end return the first and last element of an array respectively
$start = reset($str_parts);
$end = end($str_parts);

Esto evita que su expresión regular tenga que lidiar con sus números entrando en los dos dígitos.


0 para la respuesta № 3

¿Qué tal usar un analizador CSV?

$str = "1,2,3,4,5,6";
$line = str_getcsv($str);
$target = 4;
foreach($line as $key => $value) {
if($value == $target) {
echo $line[($key-1)] . "<--low high-->" . $line[($key+1)];
}
}

Salida:

3<--low high-->5

o una expresión regular podría ser

$str = "1,2,3,4,5,6";
preg_match("/(d+),4,(d+)/", $str, $matches);
echo $matches[1]."<--low high->".$matches[2];

Salida:

3<--low high->5

El único defecto con estos enfoques es si el número es el inicio o el final del rango. ¿Sería ese el caso?