Documentación offline PHP master

preg_match_all

master Ver versión oficial en línea Licencia CC-BY-3.0Descargado el 2026-08-02

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.
]+>(.*)]+>|U", "ejemplo :
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]`.
foo)|(?bar)/', 'foo bar', $matches, PREG_PATTERN_ORDER ); print_r($matches['match']); ?>
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.
]+>(.*)]+>|U", "ejemplo :
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)
texto en negritahaz clic aquí"; preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER); foreach ($matches as $val) { echo "coincidencia: " . $val[0] . "\n"; echo "parte 1: " . $val[1] . "\n"; echo "parte 2: " . $val[2] . "\n"; echo "parte 3: " . $val[3] . "\n"; echo "parte 4: " . $val[4] . "\n\n"; } ?>
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
\w+): (?P\d+)/', $str, $matches); /* Alternativa */ // preg_match_all('/(?\w+): (?\d+)/', $str, $matches); print_r($matches); ?>
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