(PHP 4, PHP 5)
preg_match — Realiza una comparación con una expresión regular
Busca en subject una coincidencia con la expresión regular dada en pattern.
El patrón de búsqueda, como cadena.
La cadena de entrada.
Si se proporciona matches, entonces éste se llena con los resultados de la búsqueda. $matches[0] contendrá el texto que coincidió con el patrón completo, $matches[1] tendrá el texto que coincidió con el primer sub-patrón entre paréntesis capturado, y así sucesivamente.
flags puede estar seguido de la siguiente bandera:
Normalmente, la búsqueda comienza por el principio de la cadena objetivo. El parámetro opcional offset se puede usar para especificar el lugar alternativo desde el cual comenzar la búsqueda (en bytes).
Note:
Usar offset no es equivalente a pasar substr($sujeto, $índice) a preg_match() en lugar de la cadena objetivo, ya que pattern puede contener declaraciones como ^, $ o (?<=x). Compare:
<?php
$sujeto = "abcdef";
$patrón = '/^def/';
preg_match($patrón, $sujeto, $coincidencias, PREG_OFFSET_CAPTURE, 3);
print_r($coincidencias);
?>El resultado del ejemplo sería:
Array ( )mientras que este ejemplo
<?php
$sujeto = "abcdef";
$patrón = '/^def/';
preg_match($patrón, substr($sujeto,3), $coincidencias, PREG_OFFSET_CAPTURE);
print_r($coincidencias);
?>producirá
Array ( [0] => Array ( [0] => def [1] => 0 ) )
preg_match() devuelve el número de veces que pattern coincide. Esto pordrá ser 0 veces (sin coincidencias) o 1 vez ya que preg_match() detendrá la búsqueda después de la primera coincidencia. preg_match_all(), por el contrario, continuará hasta que alcance el final de subject. preg_match() devuelve FALSE si se produjo un error.
Versión | Descripción |
---|---|
5.2.2 | Los sub-patrones nominados ahora aceptan la sintaxis (?<nombre>) y (?'nombre') así como (?P<nombre>). Las versiones anteriores sólo aceptaban (?P<nombre>). |
4.3.3 | Se añadió el parámetro offset |
4.3.0 | Se añadió las bandera PREG_OFFSET_CAPTURE |
4.3.0 | Se añadió el parámetro flags |
Example #1 Busca la cadena de texto "php"
<?php
// La "i" después del delimitador de patrón indica una búsqueda
// sin tener en cuenta mayúsculas/minúsculas
if (preg_match("/php/i", "PHP es el lenguaje de secuencias de comandos web preferido.")) {
echo "Se encontró una coincidencia.";
} else {
echo "No se encontró ninguna coincidencia.";
}
?>
Example #2 Busca la palabra "web"
<?php
/* El \b en el patrón indica un límite de palabra, por lo que sólo la palabra
* definida "web" se compara, y no una palabra parcial como "webbing" o "cobweb" */
if (preg_match("/\bweb\b/i", "PHP es el lenguaje de secuencias de comandos web preferido.")) {
echo "Se encontró una coincidencia.";
} else {
echo "No se encontró ninguna coincidencia.";
}
if (preg_match("/\bweb\b/i", "PHP es el lenguaje de secuencias de comandos website preferido.")) {
echo "Se encontró una coincidencia.";
} else {
echo "No se encontró ninguna coincidencia.";
}
?>
Example #3 Obtener el nombre de dominio de una URL
<?php
// obtiene el nombre del host de la URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $coincidencias);
$host = $coincidencias[1];
// obtiene los dos últimos segmentos del nombre del host
preg_match('/[^.]+\.[^.]+$/', $host, $coincidencias);
echo "El nombre de dominio es: {$coincidencias[0]}\n";
?>
El resultado del ejemplo sería:
El nombre de dominio es: php.net
Example #4 Usar sub-patrones nominados
<?php
$cadena = 'foobar: 2008';
preg_match_all('/(?P<nombre>\w+): (?P<dígito>\d+)/', $cadena, $coincidencias);
/* Esto también funciona en PHP 5.2.2 (PCRE 7.0) y posteriores, sin embargo
* la forma de arriba es la recomendada por compatibilidad con versiones anteriores */
// preg_match_all('/(?<nombre>\w+): (?<dígito>\d+)/', $cadena, $coincidencias);
print_r($coincidencias);
?>
El resultado del ejemplo sería:
Array ( [0] => foobar: 2008 [name] => foobar [1] => foobar [digit] => 2008 [2] => 2008 )