El carácter de barra invertida tiene varios usos. En primer lugar, si está seguido por un carácter no alfanumérico, elimina cualquier significado especial que el carácter pueda tener. Este uso de barra invertida como carácter de escape se aplica tanto dentro como fuera de clases de caracteres.
Por ejemplo, si desea coincidir con un carácter "*", escribe "\*" en el patrón. Esto se aplica ya sea que el carácter siguiente sería interpretado de otra manera como un metacarácter, por lo que siempre es seguro preceder un no alfanumérico con "\" para especificar que representa a sí mismo. En particular, si desea coincidir con una barra invertida, escribe "\\".
Nota:
Las cadenas de PHP con comillas simples y dobles tienen un significado especial de barra invertida. Por lo tanto, si \ debe coincidir con una expresión regular \\, entonces "\\\\" o '\\\\' debe usarse en el código PHP.
Si un patrón se compila con la opción PCRE_EXTENDED, el espacio en blanco en el patrón (excepto en una clase de caracteres) y los caracteres entre un "#" fuera de una clase de caracteres y el siguiente carácter de nueva línea se ignoran. Una barra invertida de escape puede usarse para incluir un carácter de espacio en blanco o "#" como parte del patrón.
Un segundo uso de la barra invertida proporciona una manera de codificar caracteres no imprimibles en patrones de manera visible. No hay restricción sobre la aparición de caracteres no imprimibles, aparte del cero binario que termina un patrón, pero cuando un patrón se está preparando mediante edición de texto, generalmente es más fácil usar una de las siguientes secuencias de escape que el carácter binario que representan:
El efecto preciso de "\cx" es el siguiente:
si "x" es una letra minúscula, se convierte
a mayúscula. Luego se invierte el bit 6 del carácter (hex 40).
Así, "\cz" se convierte en hex 1A, pero
"\c{" se convierte en hex 3B, mientras que "\c;"
se convierte en hex 7B.
Después de "\x", se leen hasta dos dígitos hexadecimales (las letras pueden estar en mayúsculas o minúsculas).
En modo UTF-8, "\x{...}" está permitido, donde el contenido de las llaves es una cadena de dígitos hexadecimales. Se interpreta como un carácter UTF-8 cuyo número de código es el número hexadecimal dado. La secuencia de escape hexadecimal original,
\xhh, coincide con un carácter UTF-8 de dos bytes si el valor es mayor que 127.
Después de "\0" se leen hasta dos dígitos octales adicionales.
En ambos casos, si hay menos de dos dígitos, solo se usan los que
están presentes. Así, la secuencia "\0\x\07"
especifica dos ceros binarios seguidos de un carácter BEL. Asegúrese de
proporcionar dos dígitos después del cero inicial si el carácter
que sigue es él mismo un dígito octal.
El manejo de una barra invertida seguida de un dígito que no sea 0 es complicado. Fuera de una clase de caracteres, PCRE lo lee y cualquier dígito siguiente como un número decimal. Si el número es menor que 10, o si ha habido al menos esa cantidad de paréntesis de apertura de captura anteriores en la expresión, la secuencia completa se toma como una referencia inversa. Una descripción de cómo funciona esto se da más adelante, después de la discusión de subpatrones entre paréntesis.
Dentro de una clase de caracteres, o si el número decimal es mayor que 9 y no ha habido tantas subpatrones de captura, PCRE vuelve a leer hasta tres dígitos octales siguientes a la barra invertida, y genera un solo byte a partir de los 8 bits menos significativos del valor. Los dígitos posteriores se representan a sí mismos. Por ejemplo:
Tenga en cuenta que los valores octales de 100 o más no deben introducirse con un cero inicial, ya que nunca se leen más de tres dígitos octales.
Todas las secuencias que definen un valor de un solo byte pueden usarse tanto dentro como fuera de clases de caracteres. Además,
dentro de una clase de caracteres, la secuencia "\b"
se interpreta como el carácter de retroceso (hex 08). Fuera de una clase de caracteres tiene un significado diferente (ver más abajo).
El tercer uso de la barra invertida es para especificar tipos de caracteres genéricos:
Cada par de secuencias de escape divide el conjunto completo de caracteres en dos conjuntos disjuntos. Cualquier carácter dado coincide con uno, y solo uno, de cada par.
Los caracteres de "espacio en blanco" son HT (9), LF (10), FF (12), CR (13), y espacio (32). Sin embargo, si se está realizando una coincidencia específica de la configuración regional, los caracteres con puntos de código en el rango 128-255 también pueden considerarse como caracteres de espacio en blanco, por ejemplo, NBSP (A0).
Un carácter de "palabra" es cualquier letra o dígito o el carácter de subrayado,
es decir, cualquier carácter que pueda ser parte de
una "palabra" de Perl. La definición de letras y dígitos está
controlada por las tablas de caracteres de PCRE, y puede variar si se está realizando una coincidencia específica de la configuración regional. Por ejemplo, en la configuración regional "fr" (francés), algunos códigos de caracteres mayores que 128 se usan para letras acentuadas,
y estas coinciden con \w.
Estas secuencias de tipos de caracteres pueden aparecer tanto dentro como fuera de clases de caracteres. Cada una coincide con un carácter de tipo apropiado. Si el punto de coincidencia actual está al final de la cadena de sujeto, todas fallan, ya que no hay carácter para coincidir.
El cuarto uso de la barra invertida es para ciertas afirmaciones simples. Una afirmación especifica una condición que debe cumplirse en un punto particular en una coincidencia, sin consumir ningún carácter de la cadena de sujeto. El uso de subpatrones para afirmaciones más complicadas se describe a continuación. Las afirmaciones con barra invertida son
Estas afirmaciones no pueden aparecer en clases de caracteres (pero
note que "\b" tiene un significado diferente, a saber, el carácter de retroceso, dentro de una clase de caracteres).
Un límite de palabra es una posición en la cadena de sujeto donde
el carácter actual y el carácter anterior no coinciden ambos
con \w o \W (es decir, uno coincide
con \w y el otro coincide
con \W), o el inicio o final de la cadena si el primer
o último carácter coincide con \w, respectivamente.
Las afirmaciones \A, \Z y
\z difieren de las afirmaciones tradicionales
de circunflejo y dólar (descritas en anclajes )
en que solo coinciden en el inicio y final exactos de la cadena de sujeto,
independientemente de las opciones establecidas. No se ven afectadas por las
opciones PCRE_MULTILINE o
PCRE_DOLLAR_ENDONLY.
La diferencia entre \Z y
\z es que \Z coincide antes de un salto de línea que es el último carácter de la cadena así como al final de
la cadena, mientras que \z solo coincide al final.
La afirmación \G es verdadera solo cuando la posición de coincidencia actual está en el punto de inicio de la coincidencia, como se especifica por
el argumento offset de
preg_match(). Difiere de \A
cuando el valor de offset no es cero.
\Q y \E pueden usarse para ignorar
metacaracteres de regexp en el patrón. Por ejemplo:
\w+\Q.$.\E$ coincidirá con uno o más caracteres de palabra,
seguido de literales .$. y anclado al final
de la cadena. Tenga en cuenta que esto no cambia el comportamiento de
los delimitadores; por ejemplo, el patrón #\Q#\E#$
no es válido, porque el segundo # marca el final del patrón, y el \E# se interpreta como modificadores inválidos.
\K puede usarse para restablecer el inicio de la coincidencia.
Por ejemplo, el patrón foo\Kbar coincide
con "foobar", pero informa que ha coincidido con "bar". El uso de
\K no interfiere con la configuración de subcadenas capturadas. Por ejemplo, cuando el patrón (foo)\Kbar
coincide con "foobar", la primera subcadena sigue configurada en "foo".