Delimitadores
Cuando se usan funciones PCRE, se requiere que el patrón esté encerrado
entre delimitadores. Un delimitador puede ser cualquier carácter
no alfanumérico, que no sea una barra invertida, y que no sea un espacio en blanco.
Los delimitadores que se usan a menudo son barras oblícuas (/
), signos
de número (#
) y virgulillas (~
). Los
siguientes ejemplos son todos patrones delimitados válidos.
También es posible utilizar los
delimitadores estilo corchete, donde los corchetes de apertura y cierre son
los delimitadores inicial y final, respectivamente. ()
,
{}
, []
y <>
son todos pares de delimitadores válidos.
Los delimitadores de estilo de corchete no necesitan escaparse cuando se usan
como meta caracteres dentro del patrón, pero al igual que con otros delimitadores,
deben ser escapados cuando se utilizan como caracteres literales.
Si el delimitador necesita ser comparado dentro del patrón se debe
escapar usando una barra invertida. Si el delimitador aparece a menudo dentro del
patrón, es una buena idea escoger otro delimitador para aumentar
la legibilidad.
La función
preg_quote() se puede usar para escapar una cadena
para inyectarla dentro de un patrón y su segundo parámetro opcional de puede usar
parar especificar el delimitador a escapar.
Puede añadir modificadores de
patrón después del delimitador final. El siguiente es un ejemplo
de comparación insensible a mayúsculas-minúsculas:
Pedro Gimeno ¶9 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('{[{]}', ''); preg_match('{[}]}', ''); preg_match('{[}{]}', ''); ?>
Escaping them solves it:
<?php
preg_match('{[\{]}', ''); preg_match('{[}]}', ''); preg_match('{[\}\{]}', ''); ?>
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.
Munin ¶9 years ago
preg_match('{[}]}', ''); // Warning: preg_match(): Unknown modifier ']'
preg_match('{[\}]}', ''); // OK