preg_match_all
En esta página
preg_match_all
Expresión regular global
Descripción#
preg_match_all(string $pattern, string $subject, [array $matches], [int $flags], [int $offset]): int
```php
Analiza `subject` para encontrar la expresión `pattern` y almacena los resultados en `matches`, en el orden especificado por `flags`.
Tras encontrar un primer resultado, la búsqueda continúa hasta el final de la cadena.
## Parámetros
`pattern`
La máscara a buscar, en forma de cadena.
`subject`
La cadena de entrada.
`matches`
Array que contiene todos los resultados, en un array multidimensional ordenado según el parámetro `flags`.
`flags`
Si no se proporciona ningún flag de orden, se asume `PREG_PATTERN_ORDER`.
Puede ser una combinación de los siguientes valores (señalando que es incoherente usar `PREG_PATTERN_ORDER` con `PREG_SET_ORDER` ) :
`PREG_PATTERN_ORDER`
El orden es tal que `$matches[0]` es un array que contiene los resultados que satisfacen la máscara completa, `$matches[1]` es un array que contiene los resultados que satisfacen la primera subexpresión capturante, etc.
esto es una prueba
",
$out, PREG_PATTERN_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "\n";
echo $out[1][0] . ", " . $out[1][1] . "\n";
?>
El ejemplo anterior mostrará:
ejemplo : ,
esto es una prueba
ejemplo : , esto es una prueba
Así, `$out[0]` es un array que contiene los resultados que satisfacen la máscara completa, y `$out[1]` es un array que contiene las etiquetas entre los caracteres de mayor y menor que.
Si la máscara contiene submáscaras nombradas, `$matches` contendrá además entradas que tendrán como claves los nombres de las submáscaras.
Si la máscara contiene submáscaras nombradas duplicadas, solo la submáscara más a la derecha será registrada en `$matches[NAME]`.
El ejemplo anterior mostrará:
Array
(
[0] =>
[1] => bar
)
`PREG_SET_ORDER`
Los resultados se ordenan de tal forma que `$matches[0]` contiene la primera serie de resultados, `$matches[1]` contiene la segunda, etc.
esto es una prueba
",
$out, PREG_SET_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "\n";
echo $out[1][0] . ", " . $out[1][1] . "\n";
?>
El ejemplo anterior mostrará:
ejemplo : , ejemplo :
esto es una prueba
, esto es una prueba
`PREG_OFFSET_CAPTURE`
Si este flag es pasado, todas las subcadenas que satisfacen la máscara también serán identificadas por su offset (en bytes). Tenga en cuenta que esto modifica el valor de `matches` en un array de arrays donde cada elemento es un array que contiene la subcadena satisfecha en el índice `0` y el índice de esta en la cadena `subject` en el índice `1`.
El ejemplo anterior mostrará:
Array
(
[0] => Array
(
[0] => Array
(
[0] => foobarbaz
[1] => 0
)
)
[1] => Array
(
[0] => Array
(
[0] => foo
[1] => 0
)
)
[2] => Array
(
[0] => Array
(
[0] => bar
[1] => 3
)
)
[3] => Array
(
[0] => Array
(
[0] => baz
[1] => 6
)
)
)
`PREG_UNMATCHED_AS_NULL`
Si este flag es pasado, las subexpresiones no satisfechas son reportadas como `null`; de lo contrario, son reportadas como una `string` vacía.
`offset`
Normalmente, la búsqueda comienza al inicio de la cadena subject. El parámetro opcional `offset` puede ser usado para especificar una posición para el inicio de la búsqueda (en bytes).
> [!NOTE]
> Usar el parámetro `offset` no equivale a pasar `substr($subject, $offset)` a `preg_match_all` en lugar de la cadena subject, ya que `pattern` puede contener aserciones como *^*, *\$* o *(?\<=x)*. Consulte la documentación sobre la función `preg_match` para ejemplos.
## Valores devueltos
Devuelve el número de resultados que satisfacen la máscara completa, o `false` si ocurre un error.
## Errores/Excepciones
Si el patrón regex pasado no se compila a una regex válida, se emite una `E_WARNING`.
## Historial de cambios
| Versión | Descripción |
|----|----|
| 7.2.0 | `PREG_UNMATCHED_AS_NULL` es ahora soportado para el parámetro `flags`. |
## Ejemplos
Extracción de todos los números de teléfono de un texto
Buscar pares de etiquetas HTML (voraz)
El ejemplo anterior mostrará:
coincidencia: texto en negrita parte 2: b parte 3: texto en negrita parte 4:
coincidencia: haz clic aquí parte 1: parte 2: a parte 3: haz clic aquí parte 4:
Uso de una subexpresión nombrada
El ejemplo anterior mostrará:
Array ( [0] => Array ( [0] => a: 1 [1] => b: 2 [2] => c: 3 )
[name] => Array
(
[0] => a
[1] => b
[2] => c
)
[1] => Array
(
[0] => a
[1] => b
[2] => c
)
[digit] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[2] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)
```php
Véase también#
Máscaras PCRE, preg_quote, preg_match, preg_replace, preg_split, preg_last_error