preg_match_all

preg_match_all

(PHP 3 >= 3.0.9, PHP 4, PHP 5)

preg_match_all -- Realizar una comparaci贸n global con una expresi贸n regular

Descripci贸n

int preg_match_all ( string patron, string asunto, array &coincidencias [, int banderas [, int desplazamiento]] )

Busca el asunto por todas las coincidencias con la expresi贸n regular dada en patron, y las coloca en coincidencias en el orden especificado por banderas.

Despu茅s de que la primera coincidencia es encontrada, las b煤squedas subsiguientes contin煤an desde el final de la 煤ltima coincidencia.

banderas puede ser una combinaci贸n de las siguientes banderas (note que no tiene sentido usar PREG_PATTERN_ORDER junto con PREG_SET_ORDER):

PREG_PATTERN_ORDER

Ordena los resultados de tal forma que $coincidencias[0] es una matriz con las coincidencias completas del patr贸n, $coincidencias[1] es una matriz con las cadenas que coinciden con el primer sub-patr贸n entre par茅ntesis, y as铆 sucesivamente.

<?php
preg_match_all
("|<[^>]+>(.*)</[^>]+>|U",
    
"<b>ejemplo: </b><div align=left>esta es una prueba</div>",
    
$salida, PREG_PATTERN_ORDER);
echo
$salida[0][0] . ", " . $salida[0][1] . "\n";
echo
$salida[1][0] . ", " . $salida[1][1] . "\n";
?>

Este ejemplo producir谩:

<b>ejemplo: </b>, <div align=left>esta es una prueba</div>
ejemplo: , esta es una prueba

As铆 que $salida[0] contiene una matriz de cadenas que coincidieron con el patr贸n completo, y $salida[1] contiene una matriz de cadenas ubicadas entre etiquetas.

PREG_SET_ORDER

Ordena los resultados de forma tal que $coincidencias[0] es una matriz que contiene el primer conjunto de coincidencias, $coincidencias[1] es una matriz con el segundo conjunto de coincidencias, y as铆 sucesivamente.

<?php
preg_match_all
("|<[^>]+>(.*)</[^>]+>|U",
    
"<b>ejemplo: </b><div align=\"left\">esta es una prueba</div>",
    
$salida, PREG_SET_ORDER);
echo
$salida[0][0] . ", " . $salida[0][1] . "\n";
echo
$salida[1][0] . ", " . $salida[1][1] . "\n";
?>

Este ejemplo producir谩:

<b>ejemplo: </b>, ejemplo: 
<div align="left">esta es una prueba</div>, esta es una prueba

En este caso, $coincidencias[0] es el primer conjunto de coincidencias, y $coincidencias[0][0] tiene el texto que coincidi贸 con el patr贸n completo, $coincidencias[0][1] tiene el texto que coincidi贸 con el primer sub-patr贸n y as铆 sucesivamente. De forma semejante, $coincidencias[1] es el segundo conjunto de coincidencias, etc.

PREG_OFFSET_CAPTURE

Si es pasada esta bandera, para cada coincidencia que ocurre, ser谩 devuelto tambi茅n el desplazamiento de la cadena adjunta. Note que esto modifica el valor de retorno, convirti茅ndolo en una matriz en donde cada elemento es una matriz que consiste de la cadena que coincidi贸 en la posici贸n 0, y su desplazamiento de cadena al interior del asunto en la posici贸n 1. Esta bandera se encuentra disponible a partir de PHP 4.3.0.

Si no se indica bandera alguna, se asume el uso de PREG_PATTERN_ORDER.

Normalmente, la b煤squeda comienza desde el inicio de la cadena de asunto. El par谩metro opcional desplazamiento puede ser usado para especificar el lugar alternativo desde donde debe iniciar la b煤squeda. El par谩metro desplazamiento se encuentra disponible a partir de PHP 4.3.3.

Nota: El uso de desplazamiento no es equivalente a pasar substr($asunto, $desplazamiento) a preg_match_all() en lugar de la cadena de asunto, ya que patron puede contener aserciones como ^, $ o (?<=x). Vea preg_match() para m谩s ejemplos.

Devuelve el n煤mero de coincidencias con el patr贸n completo (que puede ser cero), o FALSE si ocurre un error.

Ejemplo 1. Obtener todos los n煤meros telef贸nicos de un segmento de texto.

<?php
preg_match_all
("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x",
                
"Llame al 555-1212  1-800-555-1212", $telefonos);
?>

Ejemplo 2. Encontrar etiquetas HTML coincidentes (de forma ambiciosa)

<?php

// El \\2 es un ejemplo de referencia hacia atras. Este le dice a pcre
// que debe buscar el segundo conjunto de parentesis en la expresion
// regular misma, que seria ([\w]+) en este caso. La barra invertida
// extra es requerida ya que la cadena se encuentra entre comillas
// dobles.
$html = "<b>texto en negrilla</b><a href=hola.html>haga clic aqui</a>";

preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $coincidencias, PREG_SET_ORDER);

foreach (
$coincidencias as $val) {
    echo
"coincidencia: " . $val[0] . "\n";
    echo
"parte 1: " . $val[1] . "\n";
    echo
"parte 2: " . $val[3] . "\n";
    echo
"parte 3: " . $val[4] . "\n\n";
}
?>

Este ejemplo producir谩

coincidencia: <b>texto en negrilla</b>
parte 1: <b>
parte 2: texto en negrilla
parte 3: </b>

coincidencia: <a href=hola.html>haga clic aqui</a>
parte 1: <a href=hola.html>
parte 2: haga clic aqui
parte 3: </a>

Vea tambi茅n preg_match(), preg_replace(), y preg_split().