La siguiente es una colección de códigos de funciones comunes para expresiones regulares en PHP para facilitar el aprendizaje de la expresión regular PHP
preg_grep.
(PHP 4, PHP 5)
preg_grep: devuelve descripciones de celdas de matriz que coinciden con el patrón
array preg_grep (patrón de cadena, entrada de matriz [, int flags])
preg_grep() Devuelve una matriz que contiene las celdas de la matriz de entrada que coinciden con el patrón dado.
Los indicadores pueden ser los siguientes:
PREG_GREP_INVERT
Si se pasa en esta bandera, preg_grep() devuelve celdas en la matriz de entrada que no coinciden con el patrón dado. Esta etiqueta está disponible desde PHP 4.2.0.
A partir de PHP 4.0.4, los resultados devueltos por preg_grep() se indexan utilizando las claves de la matriz de entrada. Si no desea dichos resultados, utilice array_values() para volver a indexar los resultados devueltos por preg_grep().
Lo anterior es la descripción de preg_grep() en el manual. En primer lugar, esta es una función regular compatible con Perl, así que supongo que preg_grep significa p (perl) reg (regular) _grep. Su característica es que se puede usar para matrices a través de su propia expansión. coincide en matrices multidimensionales y puede devolver una matriz coincidente o no coincidente a través del parámetro flags. Su eficiencia es mucho más rápida que usar la estructura foreach(...){if...} (no verificada) y puede coincidir con patrones complejos. Es de gran utilidad en aplicaciones como búsqueda y clasificación.
ejemplo:
<?
$arr = array('abc'=>12.213,'bb'=>12345,'ba'=>23.2321,34.3,'23'=>'3.3','23434'=>'bbb');
// Devuelve todos los elementos de la matriz que contienen números de punto flotante.
$fl_array = preg_grep ("/^(d+)?.d+$/", $arr);
print_r($fl_array);
?>
partido_preg
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match -- Instrucciones de coincidencia de expresiones regulares
int preg_match (patrón de cadena, asunto de cadena [, coincidencias de matriz [, banderas int]] )
busca en la cadena de asunto contenido que coincida con la expresión regular dada por el patrón.
Si se proporcionan coincidencias, se completará con los resultados de la búsqueda. $matches[0] contendrá texto que coincida con todo el patrón, $matches[1] contendrá texto que coincida con el primer subpatrón capturado entre paréntesis, y así sucesivamente.
Las banderas pueden ser las siguientes banderas:
PREG_OFFSET_CAPTURE
Si se establece este indicador, el desplazamiento de cadena asociado también se devolverá para cada aparición de una coincidencia. Tenga en cuenta que esto cambia el valor de la matriz devuelta para que cada celda en ella también sea una matriz, donde el primer elemento es la cadena coincidente y el segundo elemento es su desplazamiento. Esta etiqueta está disponible desde PHP 4.3.0.
El parámetro flags está disponible desde PHP 4.3.0.
preg_match() devuelve el número de veces que coincide el patrón. O 0 veces (sin coincidencia) o 1 vez, ya que preg_match() dejará de buscar después de la primera coincidencia. preg_match_all(), por el contrario, buscará hasta el final del tema. Si ocurre un error, preg_match() devuelve FALSO.
Consejo: si solo desea ver si una cadena está contenida dentro de otra cadena, no use preg_match(). Puedes usar strpos() o strstr() en su lugar, que es mucho más rápido.
Lo anterior es la descripción de preg_match () en el manual. Creo que la función de esta función es que se puede usar para verificar, es decir, si una determinada cadena cumple con ciertos requisitos. La limitación es que, como se mencionó anteriormente, coincide 0 veces o 1 vez. Y el valor de retorno es el número de coincidencias. Cuando se requiere una coincidencia completa, se puede usar preg_match_all(). También vale la pena mencionar la función de la matriz $matches, que se puede usar como valor de retorno del patrón propio, lo cual a veces es útil.
Ejemplo:
<?
if (preg_match ("/(bwebb)s(d)/i", "PHP es el lenguaje web 45 scripting web 34 preferido.",$match)) {
imprimir "Se encontró una coincidencia.";
print_r($coincidencia);
} demás {
imprimir "No se encontró ninguna coincidencia.";
}
?>
<?php
// Obtener el nombre de host de la URL
preg_match("/^(http://)?([^/]+)/i",
" http://www.php.net/index.html ", $coincidencias);
$host = $coincidencias[2];
// Obtiene los siguientes dos segmentos del nombre del host
preg_match("/[^./]+.[^./]+$/", $host, $coincidencias);
echo "el nombre de dominio es: {$matches[0]}n";
?>
preg_match_all
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match_all: realiza una coincidencia global de expresiones regulares. La explicación de esta función en el manual es muy clara, por lo que no la explicaré más.
ilustrar
int preg_match_all (patrón de cadena, asunto de cadena, coincidencias de matriz [, banderas int])
busca todo el contenido en el tema que coincida con la expresión regular dada por el patrón y coloca los resultados en coincidencias en el orden especificado por las banderas.
Una vez encontrada la primera coincidencia, las búsquedas posteriores comienzan al final de la coincidencia anterior.
Los indicadores pueden ser una combinación de los siguientes indicadores (tenga en cuenta que no tiene sentido usar PREG_PATTERN_ORDER y PREG_SET_ORDER juntos):
PREG_PATTERN_ORDER
Ordene los resultados de modo que $matches[0] sea una matriz de todas las coincidencias de patrones, $matches[1] sea una matriz de cadenas que coincidan con el subpatrón en el primer paréntesis, y así sucesivamente.
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U", "<b>ejemplo: </b><div align=left>esto es una prueba</div >",
$salida, PREG_PATTERN_ORDER);
imprimir $salida[0][0].", ".$salida[0][1]."n";
imprimir $salida[1][0].", ".$salida[1][1]."n";
?>
Este ejemplo generará:
<b>ejemplo: </b>, <div align=left>esto es una prueba</div>
ejemplo: , esto es una prueba.
Por lo tanto, $out[0] contiene la cadena que coincide con todo el patrón y $out[1] contiene la cadena entre un par de etiquetas HTML.
PREG_SET_ORDER
Ordene los resultados de modo que $matches[0] sea la matriz del primer conjunto de coincidencias, $matches[1] sea la matriz del segundo conjunto de coincidencias, y así sucesivamente.
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
"<b>ejemplo: </b><div align=left>esto es una prueba</div>",
$salida, PREG_SET_ORDER);
imprimir $salida[0][0].", ".$salida[0][1]."n";
imprimir $salida[1][0].", ".$salida[1][1]."n";
?>
Este ejemplo generará:
<b>ejemplo: </b>, ejemplo:
<div align=left>esto es una prueba</div>, esto es una prueba
En este ejemplo, $matches[0] es el primer conjunto de resultados coincidentes, $matches[0][0] contiene el texto que coincide con el patrón completo, $matches[0][1] contiene el texto que coincide con el primer subpatrón , terminando en Y así sucesivamente. Del mismo modo, $matches[1] es el segundo conjunto de coincidencias, y así sucesivamente.
PREG_OFFSET_CAPTURE
Si se establece este indicador, el desplazamiento de cadena asociado también se devolverá para cada aparición de una coincidencia. Tenga en cuenta que esto cambia el valor de la matriz devuelta para que cada celda también sea una matriz, donde el primer elemento es la cadena coincidente y el segundo elemento es su desplazamiento dentro del asunto. Esta etiqueta está disponible desde PHP 4.3.0.
Si no se proporciona ninguna etiqueta, se supone PREG_PATTERN_ORDER.
Devuelve el número de veces que coincidió todo el patrón (posiblemente cero), o FALSO en caso de error.
Ejemplo 1. Obtener todos los números de teléfono de un mensaje de texto
<?php
preg_match_all ("/(? (d{3})? )? (?(1) [-s] ) d{3}-d{4}/x",
"Llame al 555-1212 o 1-800-555-1212", $teléfonos);
?>
Ejemplo 2. Buscar etiquetas HTML coincidentes (codicioso)
<?php
// \2 es un ejemplo de referencia inversa, su significado en PCRE es
// Debe coincidir con el contenido dentro del segundo conjunto de corchetes en la propia expresión regular, en este caso
// Eso es ([w]+). Debido a que la cadena está entre comillas dobles, necesita
//Agrega una barra invertida adicional.
$html = "<b>texto en negrita</b><a href=howdy.html>haz clic en mí</a>";
preg_match_all ("/(<([w]+)[^>]*>)(.*)(</\2>)/", $html, $coincidencias);
para ($i=0; $i< cuenta($coincidencias[0]); $i++) {
echo "coincidente: ".$matches[0][$i]."n";
echo "parte 1: ".$matches[1][$i]."n";
echo "parte 2: ".$matches[3][$i]."n";
echo "parte 3: ".$matches[4][$i]."nn";
}
?>
cita_preg
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_quote - escapa de la descripción del carácter de expresión regular
string preg_quote (string str [, delimitador de cadena])
preg_quote() toma str como parámetro y agrega una barra invertida delante de cada carácter que pertenece a la sintaxis de la expresión regular. Si necesita hacer coincidir una cadena generada dinámicamente como patrón, puede usar esta función para escapar de los caracteres especiales que pueda contener.
Si se proporciona el delimitador de argumento opcional, este carácter también se escapará. Se puede utilizar para escapar del delimitador requerido por la función PCRE. El delimitador más utilizado es la barra diagonal /.
Los caracteres especiales para expresiones regulares incluyen: . + * ? [ ^ ] $ ( ) { } = < > :.
Nota: Esta función es segura de usar en objetos binarios.
Lo anterior es la explicación en el manual, que es muy clara, por lo que no entraré en detalles. Además, hay una nota en el manual de que esta función se puede usar de forma segura para objetos binarios, lo cual es muy útil.
Ejemplo: Ejemplo 1. Ejemplo de preg_quote()
<?php
$palabras clave = '$40 por un g3/400';
$palabras clave = preg_quote($palabras clave, '/');
echo $palabras clave // devuelve $40 para g3/400
?>
Ejemplo 2. Agregar cursiva a una palabra en un texto
<?php
// En este ejemplo, se usa preg_quote($word) para mantener el asterisco fuera de la expresión regular
// Tiene un significado especial.
$textbody = "Este libro es *muy* difícil de encontrar.";
$palabra = "*muy*";
$textbody = preg_replace ("/".preg_quote($palabra)."/",
"<i>".$palabra."</i>",
$cuerpo de texto);
?>
El siguiente paso es aplicar la función preg_replace que es súper flexible, súper poderosa y muy utilizada.
preg_replace
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_replace: realiza instrucciones de búsqueda y reemplazo de expresiones regulares
Mixed preg_replace (patrón mixto, reemplazo mixto, asunto mixto [, límite int])
busca en el sujeto coincidencias del patrón y los reemplaza con reemplazo. Si se especifica límite, solo se reemplazarán las coincidencias de límite. Si se omite el límite o tiene un valor de -1, se reemplazarán todas las coincidencias.
el reemplazo puede contener una referencia inversa en el formato \n o (desde PHP 4.0.4) en el formato $n, siendo preferible este último. Cada una de estas referencias será reemplazada por texto que coincida con el enésimo subpatrón capturado entre corchetes. n puede variar de 0 a 99, donde \0 o $0 se refiere al texto que coincide con todo el patrón. Cuente el paréntesis izquierdo de izquierda a derecha (comenzando en 1) para obtener el número de subpatrones.
Para patrones de reemplazo que siguen una referencia inversa por un número (es decir, un número que sigue inmediatamente a un patrón coincidente), la notación familiar \1 no se puede utilizar para representar la referencia inversa. Por ejemplo, \11 confundirá a preg_replace() si quiere una referencia inversa de \1 seguida del número 1 o una referencia inversa de \11 . La solución en este caso es usar ${1}1. Esto crea una referencia inversa aislada para $1, dejando el otro 1 solo literal.
Si se encuentra una coincidencia, se devolverá el asunto reemplazado; de lo contrario, se devolverá el asunto original.
Cada parámetro de preg_replace() (excepto el límite) puede ser una matriz. Si tanto el patrón como el reemplazo son matrices, se procesarán en el orden en que aparecen sus claves en la matriz. Esto no es necesariamente lo mismo que el orden numérico del índice. Si se utiliza un índice para identificar qué patrón se reemplazará por qué reemplazo, la matriz debe ordenarse con ksort() antes de llamar a preg_replace().
Si el tema es una matriz, se realiza una búsqueda y reemplazo en cada elemento del tema y se devuelve una matriz.
Si patrón y reemplazo son matrices, preg_replace() extraerá sus valores para buscar y reemplazar el tema. Si hay menos valores en reemplazo que en patrón, se usa una cadena vacía como valor de reemplazo restante. Si el patrón es una matriz y el reemplazo es una cadena, esta cadena se usa como valor de reemplazo para cada valor del patrón. Al revés no tiene sentido.
El modificador /e hace que preg_replace() trate el argumento de reemplazo como código PHP (después de que se hayan reemplazado las referencias retrospectivas apropiadas). Consejo: asegúrese de que el reemplazo forme una cadena de código PHP válida; de lo contrario, PHP informará un error de análisis de sintaxis en la línea que contiene preg_replace().
Nota: El parámetro de límite se agregó después de PHP 4.0.1pl2.
Creo que su poder es que no solo puede manejar cadenas, sino también matrices, y su función de referencia inversa es muy flexible. Básicamente, puede satisfacer la mayoría de las necesidades de los usuarios comunes. Si no es competente, también tenemos la función preg_replace_callback(), que puede personalizar la función de devolución de llamada para cumplir con sus requisitos avanzados. Como diseñar filtros, etc.
preg_replace_callback
(PHP 4 >= 4.0.5, PHP 5)
preg_replace_callback: utiliza la función de devolución de llamada para realizar búsquedas de expresiones regulares y reemplazar instrucciones
Mixed preg_replace_callback (patrón mixto, devolución de llamada, asunto mixto [, límite int])
Esta función se comporta casi como preg_replace(), excepto que en lugar de proporcionar un parámetro de reemplazo, se especifica una función de devolución de llamada. Esta función toma como entrada una serie de coincidencias en la cadena de destino y devuelve la cadena utilizada para el reemplazo.
Ejemplo 1. Ejemplo de preg_replace_callback()
<?php
// Este texto es para 2002,
// Ahora queremos que esté disponible para 2003
$text = "El día de los inocentes es el 01/04/2002n";
$text.= "La última Navidad fue el 24/12/2001n";
// función de devolución de llamada
función next_year($coincidencias) {
// Normalmente: $matches[0] es la coincidencia completa
// $matches[1] es la coincidencia del subpatrón en el primer paréntesis
// etcétera
return $coincidencias[1].($coincidencias[2]+1);
}
echo preg_replace_callback(
"|(d{2}/d{2}/)(d{4})|",
"año_próximo",
$texto);
//El resultado es:
// El día de los inocentes es el 01/04/2003
// La Navidad pasada fue el 24/12/2002
?>
A menudo necesitarás la función de devolución de llamada para preg_replace_callback() en un solo lugar. En este caso, puedes usar create_function() para declarar una función anónima como devolución de llamada dentro de la llamada a preg_replace_callback(). tenga toda la información para la llamada en un solo lugar y no satura el espacio de nombres de la función con un nombre de función de devolución de llamada que no se use en ningún otro lugar.
Para los amigos que usan la función preg_replace_callback(), probablemente deberían necesitar la función de devolución de llamada (de lo contrario, ¿por qué usarla? ¿No es mejor usar preg_replace directamente), pero a menudo solo se usa en un lugar? En este caso, puede utilizar create_function() para declarar una función anónima como función de devolución de llamada de preg_replace_callback(). De esta forma satisfacemos la necesidad de declarar información sin confundirnos con un nombre de función que no volverá a ser utilizado.
Ejemplo 2. preg_replace_callback() y create_function()
<?php
/* Un filtro de línea de comando estilo UNIX que elimina la cadena al principio de cada párrafo
*Convierte letras mayúsculas a minúsculas*/
$fp = fopen("php://stdin", "r") o die("no puedo leer stdin");
mientras (!feof($fp)) {
$línea = fgets($fp);
$línea = preg_replace_callback(
'|<p>s*w|',
crear_función(
// El uso de comillas simples aquí es fundamental.
// De lo contrario, reemplaza todos los $ con $
'$coincidencias',
'return strtolower($coincidencias[0]);'
),
línea $
);
eco $línea;
}
fclose($fp);
?>
Finalmente
preg_split
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_split: divide una cadena usando expresiones regulares. No entraré en detalles aquí.
ilustrar
array preg_split (patrón de cadena, asunto de cadena [, límite int [, banderas int]])
devuelve una matriz que contiene las subcadenas en el asunto divididas a lo largo de los límites que coinciden con el patrón.
Si se especifica límite, como máximo se devuelven subcadenas de límite. Si límite es -1, significa que no hay límite y se puede usar para continuar especificando indicadores de parámetros opcionales.
Los indicadores pueden ser cualquier combinación de los siguientes indicadores (combinados con el operador OR bit a bit | ):
PREG_SPLIT_NO_EMPTY
Si se establece este indicador, preg_split() solo devuelve componentes no vacíos.
PREG_SPLIT_DELIM_CAPTURE
Si se establece este indicador, las expresiones entre corchetes en patrones delimitadores también se capturan y devuelven. Esta etiqueta se agregó en PHP 4.0.5.
PREG_SPLIT_OFFSET_CAPTURE
Si se establece este indicador, también se devolverá el desplazamiento de cadena asociado de cada aparición del resultado coincidente. Tenga en cuenta que esto cambia el valor de la matriz devuelta para que cada celda también sea una matriz, donde el primer elemento es la cadena coincidente y el segundo elemento es su desplazamiento dentro del asunto. Esta etiqueta está disponible desde PHP 4.3.0.
Consejo: Si no necesita el poder de las expresiones regulares, puede optar por utilizar alternativas más rápidas (y más simples) como explode() o str_split().