PHP 8.5.0 Beta 2 available for testing

Delimitadores

Al usar las funciones PCRE, es obligatorio que el patrón esté encerrado por delimitadores. Un delimitador puede ser cualquier carácter no alfanumérico, no barra invertida, no espacio en blanco. Los espacios en blanco iniciales antes de un delimitador válido se ignoran silenciosamente.

Los delimitadores comúnmente utilizados son las barras inclinadas hacia adelante (/), signos de número (#) y tildes (~). Los siguientes son ejemplos de patrones delimitados válidos.

/foo bar/
#^[^0-9]$#
+php+
%[a-zA-Z0-9_-]%

También es posible usar delimitadores de estilo de corchetes donde los corchetes de apertura y cierre son el delimitador de inicio y fin, respectivamente. (), {}, [] y <> son todos pares de delimitadores de estilo de corchetes válidos.

(this [is] a (pattern))
{this [is] a (pattern)}
[this [is] a (pattern)]
<this [is] a (pattern)>
Los delimitadores de estilo de corchetes no necesitan ser escapados cuando se usan como metacaracteres dentro del patrón, pero como con otros delimitadores deben ser escapados cuando se usan como caracteres literales.

Si el delimitador necesita coincidir dentro del patrón debe ser escapado usando una barra invertida. Si el delimitador aparece con frecuencia dentro del patrón, es una buena idea elegir otro delimitador para aumentar la legibilidad.

/http:\/\//
#http://#
La función preg_quote() puede ser utilizada para escapar una cadena para inyectarla en un patrón y su segundo parámetro opcional puede ser utilizado para especificar el delimitador a escapar.

Puede agregar modificadores de patrón después del delimitador final. El siguiente es un ejemplo de coincidencia sin distinción de mayúsculas y minúsculas:

#[a-z]#i

add a note

User Contributed Notes 3 notes

up
36
Pedro Gimeno
10 years ago
Note that bracket style opening and closing delimiters aren't a 100% problem-free solution, as they need to be escaped when they aren't in matching pairs within the expression. That mismatch can happen when they appear inside character classes [...], as most meta-characters lose their special meaning. Consider these examples:

<?php
preg_match
('{[{]}', ''); // Warning: preg_match(): No ending matching delimiter '}'
preg_match('{[}]}', ''); // Warning: preg_match(): Unknown modifier ']'
preg_match('{[}{]}', ''); // Warning: preg_match(): Unknown modifier ']'
?>

Escaping them solves it:

<?php
preg_match
('{[\{]}', ''); // OK
preg_match('{[}]}', ''); // OK
preg_match('{[\}\{]}', ''); // OK
?>
up
11
Munin
10 years ago
preg_match('{[}]}', ''); // Warning: preg_match(): Unknown modifier ']'

preg_match('{[\}]}', ''); // OK
up
4
Revo
6 years ago
Note that angle brackets `<>` shouldn't be used as delimiters whenever you will have to invoke advanced clusters like atomic groups or lookbehinds because their including angle bracket doesn't come in pair and escaping doesn't help either.
To Top