preg_grep nos permite, a partir de un array, generar otra matriz que tenga los valores del array que coinciden con un patrón.
Su sentencia es:
$matriz = preg_grep($patron, $otraMatriz);
?>
Patrón es el parámetro expresado mediante expresiones regulares que nos permite encontrar algo definido dentro de, en este caso, una matriz dada.
otraMatriz es la matriz principal en la que tenemos diversos valores y en donde vamos a buscar, mediante el patrón, las coincidencias que queramos.
Ejemplo
$cadena[] = 'Al saludar decimos hola';
$cadena[] = 'Ejemplo';
$cadena[] = "Hola mundo";
$patron = '/hola/';
$matriz = preg_grep($patron, $cadena);
foreach($matriz as $clave => $valor)
echo "Valor: $valor
";
?>
Nos devuelve:
Valor: Al saludar decimos hola
Si recordemos que en expresiones regulares se distinguen mayúsculas de minúsculas, y para evitar esa distinción ponemos una i al final del patrón, quedando: $patron = ‘/hola/i’;
preg_quote nos devuelve una cadena de texto con los caracteres especiales de las expresiones regulares escapados, por lo que es útil para combinarlo con estas.
Estos caracteres especiales son: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : –
Su sentencia es:
$resultado = preg_quote($cadena, ($caracter));
?>
Cadena es la cadena de texto que introducimos.
Caracter es un carácter que introducimos si también queremos escaparlo (es opcional).
Resultado es la cadena de texto de salida, que se encuentra con los caracteres escapados (mediante la barra \)
Ejemplo
$cadena = 'Ejemplo-nuevo';
echo preg_quote($cadena, 'e');
?>
Nos devuelve:
Ej\emplo\-nu\evo
Porque escapa el carácter especial por defecto “-” y el que queriamos nosotros, ‘e’.
preg_replace_callback nos permite, al igual que preg_replace, reemplazar datos, pero en este caso, lo podemos realizar a través de funciones, siendo el resultado más personalizable y complejo.
Su sentencia es:
$resultado = preg_replace_callback($patron, función, $input);
?>
Patrón es la expresión que nos permite encontrar los datos que queremos.
Función es el nombre de la función que utilizaremos.
Input es el valor que introduciremos en la función anterior.
Ejemplo
$cadena = "El pasado día 15 hubo una revuelta";
function cambiar($ejemplo) {
return $ejemplo[0]+2;
//ejemplo[0] vale 15, que es el número encontrado por el patrón.
}
echo preg_replace_callback("/\d{2}/", "cambiar", $cadena);
//Se encarga de cambiar el número 15, por 15+2 (es decir, 17), junto con el resto de la cadena.
?>
El objetivo de esta función es añadir 2 días más a la fecha que pone en la cadena. Nos devuelve:
El pasado día 17 hubo una revuelta
preg_split nos permite partir una cadena de texto, dando como resultado una matriz en donde se guarde en cada clave esos valores.
Su sentencia es:
$matriz = preg_split($patron, $cadena, ($limite, ($opciones)))
?>
Patrón es el conjunto de expresiones regulares a partir de las cuales, cuando encuentre una coincidencia partirá la expresión, almacenando el resultado en una matriz.
Cadena es la cadena de texto que deseamos partir.
Límite es el número máximo de cadenas que queremos obtener. Este parámetro es opcional. Si se escribe un 0, o no se pone, se entiende que no hay límite.
Opciones nos permite personalizar el resultado de la matriz resultante. Explicaré las 3 opciones más comunes.
Ejemplo
$cadena = preg_split("/(a)/", "Esta es una cadena de texto de ejemplo.", 0);
//No me complico la vida con el patrón, pero podría usar cualquier tipo de expresión regular válida
foreach($cadena as $clave => $valor)
echo "Valor: $valor
";
?>
Nos devuelve:
Valor: Est
Valor: es un
Valor: c
Valor: den
Valor: de texto de ejemplo.
Podemos observar que cada valor de la matriz, corresponde al trozo de cadena partida (sin el separador).
Ahora explicaré las diferentes opciones que podríamos añadir:
PREG_SPLIT_NO_EMPTY se encarga de que la matriz no tenga ningún elemento vacio. ¿Cómo es posible que tenga elementos vacios la matriz?
Imaginemos que usamos de patrón un punto, y de cadena, una frase terminada en punto:
“Esto es un ejemplo.”
preg_split separa en dos trozos lo que hay antes, y lo que hay detrás del punto. Como detrás del punto no hay nada, se guarda un valor vacio (null).
PREG_SPLIT_DELIM_CAPTURE se encarga de que nuestra matriz venga con los delimitadores como valores nuestra propia matriz (esto solo funciona si se han usado paréntesis en la expresión regular de patrón). Es decir, en nuestro anterior ejemplo nos devolvería lo siguiente:
Valor: Est
Valor: a
Valor: es un
Valor: a
Valor: c
Valor: a
Valor: den
Valor: a
Valor: de texto de ejemplo.
PREG_SPLIT_OFFSET_CAPTURE genera una matriz de dos dimensiones, de manera que, en cada coincidencia nos muestra la posición del primer carácter de la cadena partida. Lo veremos claramente mediante un ejemplo:
$cadena = preg_split("/(a)/", "Esta es una cadena de texto de ejemplo.", 0, PREG_SPLIT_OFFSET_CAPTURE);
foreach($cadena as $clave => $valor)
echo "Valor: $valor[0] y $valor[1]
";
?>
Nos devuelve:
Valor: Est y 0
Valor: es un y 4
Valor: c y 11
Valor: den y 14
Valor: de texto de ejemplo. y 18
Repito, el número obtenido es la posición del primer carácter de cada uno, respecto la cadena original.
muy buena explicacion!!!