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 № 1Creo 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?