El carácter barra invertida tiene varios usos. El primero es que si está seguido de un carácter no alfanumérico, toma cualquier significado especial que el carácter pueda tener. Este uso de la barra invertida como carácter de escape se aplica tanto dentro como fuera de las clases carácter.
Por ejemplo, si quiere coincidir un carácter "*", escriba "\*" en el patrón. Esto se aplica aunque el siguiente carácter pudiera ser interpretado como un metacarácter, por lo que es mejor asegurarse de preceder un carácter no alfanumérico con "\" para especificar que éste se representa a sí mismo. En particular, si quiere coincidir una barra invertida, escriba "\\".
Nota:
Las cadenas PHP entre comillas simples y dobles tienen un significado especial para la barra invertida. Así, si \ ha de ser comparado con una expresión regular \\, entonces se debe usar "\\\\" o '\\\\' en código PHP.
Si un patrón es compilado con la opción PCRE_EXTENDED, los espacios en blanco en el patrón (distinto de una clase carácter) y los caracteres entre un "#" fuera de una clase carácter y el siguiente carácter de nueva línea se ignoran. Una barra invertida de escape se puede usar para incluir un carácter 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 una forma visible. No hay restricciones en la aparición de los caracteres no imprimibles, excepto para el cero binario el cual finaliza el patrón, pero cuando un patrón está siendo preparado para edición de texto, normalmente es más fácil usar una de las siguientes secuencias de escape en vez del carácter binario que representan:
El efecto exacto de "\cx" es como sigue: si "x" es una letra minúscula, ésta se convierte a mayúscula. Después se invierte el bit 6 del carácter (40 hex). Así, "\cz" se convierte en 1A hex, pero "\c{" se convierte en 3B hex, mientras que "\c;" se conviente en 7B hex.
Después de "\x", se leen hasta dos dígitos hexadecimales (las letras pueden ser tanto mayúsculas como minúsculas). En modo UTF-8, "\x{...}" es permitido, donde el contenido entre las llaves es una cadena de dígitos hexadecimales. Esto se interpreta como un carácter UTF-8 cuyo número de código es el dado por el número hexadecimal. La secuencia de escape hexadecimal original, \xhh, conincide 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 más. En cualquier caso, si hay menos de dos dígitos, sólo se usan aquéllos 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 también un dígito octal.
El manejo de una barra invertida seguida de un dígito distinto de 0 es complicado. Fuera de una clase carácter, PCRE lee este dígito, así como cualesquiera dígitos siguientes, como un número decimal. Si el número es menor que 10, o si ha habido al menos tantas capturas previas hacia la izquierda en la expresión, la secuencia entera es tomada como una retroreferencia. Una descripción de cómo funciona esto se da más adelante, seguido de una discusión sobre sub-patrones entre paréntesis.
Dentro de una clase carácter, o si el número decimal es mayor que 9 y no han habido tantos sub-patrones de captura, PCRE relee hasta tres dígitos octales siguientes a la barra invertida, y genera un sólo byte de los 8 bits menos significativos del valor. Cualesquiera dígitos subsiguientes se representan a sí mismos. Por ejemplo:
Observe que los valores octales 100 y mayores no deben ser precedidos por un cero inicial, ya que nunca se leen más de tres dígitos octales.
Todas las secuencias que definen un valor de byte único se pueden usar tanto dentro como fuera de las clases carácter. Además, dentro de una clase carácter, la secuencia "\b" se interpreta como el carácter retroceso (08 hex). Fuera de una clase carácter tiene diferentes significados (véase más abajo).
El tercer uso de la barra invertida es parar especificar tipos de caracteres genéricos:
Cada par de sencuencias de escape divide el conjunto completo de caracteres en dos conjuntos separados. Cualquier carácter dado concide con uno, y sólo uno, de cada par.
Los caracters "espacios en blanco" son HT (9), LF (10), FF (12), CR (13), y el espacio (32). Sin embargo, si ocurre una coincidencia específica de una región, los caracteres con puntos de código en el rango 128-255 podrían también considerarse como caracteres de espacio en blanco, por ejemplo, NBSP (A0).
Un carácter "palabra" es cualquier letra o dígito o el carácter subrayado, es decir, cualquier carácter que pueda ser parte de una "palabra" Perl. La definición de letras y dígitos está controlada por las tablas de caracteres de PCRE, y pueden variar si tiene lugar la comparación de configuraciones regionales específicas. Por ejemplo, en la configuración regional "fr" (Francés), algunos códigos de caracteres mayores que 128 se usan para letras acentuadas, y éstos se comparan por \w.
Estas secuencias de tipo de caracteres puede aparecer tanto dentro como fuera de las clases carácter. Cada una coincide con un carácter del tipo apropiado. Si el punto de coincidencia actual está al final de la cadena objetivo, todas ellas fallarán, ya que no hay caracteres a comparar.
El cuarto uso de la barra invertida es para ciertas declaraciones simples. Una declaración especifica una condición que se debe encontrar en un punto particular de una comparación, sin consumir ningún carácter de la cadena objetivo. El uso de sub-patrones para declaraciones más complicadas se describe después. Las declaraciones de la barra invertida son
Estas declaraciones pueden no aparecer en clases carácter (pero observe que "\b" tiene un significado diferente, a saber, el carácter retroceso, dentro de una clase carácter).
Un límite de palabra es una posición en la cadena objetivo donde el carácter actual y el carácter previo no coinciden con \w o \W (es decir, uno coincide con \w y el otro coincice con \W), o el inicio o final de la cadena si el primer o último carácter coincide con \w, respectivamente.
Las declaraciones \A, \Z, y \z difieren de los tradicionales circumflejo y dólar (descritos en anclas) de modo que siempre coinciden con el inicio y final absolutos de la cadena objetivo, sin importar las opciones que se apliquen. No les afectan las opciones PCRE_MULTILINE o PCRE_DOLLAR_ENDONLY. La diferencia entre \Z y \z es que \Z coincide antes de una nueva línea que es el último carácter de la cadena, además de al final de la cadena, mientras que \z coincide sólo con el final.
La declaración \G es verdadera sólo cuando la posición
de comparación actual está al principio del punto de coincidencia, tal como se especifica
en el argumento offset
de
preg_match(). Difiere de \A
cuando el valor de offset
no es cero.
Se puede usar \Q y \E para ignorar metacaracteres de expresiones regulares. Por ejemplo: \w+\Q.$.\E$ coincidirá con uno o más caracteres palabra, seguidos por los literales .$. y anclados al final de la cadena.
A partir de PHP 5.2.4, \K se puede usar para reiniciar el comienzo de comparación. Por ejemplo, el patrón foo\Kbar coincide con "foobar", pero informa de que ha coincidido con "bar". El uso de \K no interfiere con el parámetro de las cadenas capturadas. Por ejemplo, cuando el patrón (foo)\Kbar coincide con "foobar", la primera subcadena está establecida aún a "foo".