Subpatrones condicionales
Es posible hacer que el proceso de coincidencia obedezca un subpatrón
condicionalmente o elegir entre dos subpatrones alternativos,
dependiendo del resultado de una afirmación, o
si un subpatrón de captura anterior coincidió o no. Las
dos formas posibles de subpatrón condicional son
Si la condición se cumple, se usa el yes-pattern; de lo contrario
se usa el no-pattern (si está presente). Si hay
más de dos alternativas en el subpatrón, ocurre un error en el momento de la compilación.
Hay dos tipos de condiciones. Si el texto entre los
paréntesis consiste en una secuencia de dígitos, entonces la
condición se cumple si el subpatrón de captura de ese número ha coincidido anteriormente. Considere el siguiente patrón,
que contiene espacio en blanco no significativo para hacerlo
más legible (asumiendo la opción PCRE_EXTENDED
y para dividirlo en tres partes para facilitar la discusión):
La primera parte coincide con un paréntesis de apertura opcional, y
si ese carácter está presente, lo establece como la primera subcadena capturada. La segunda parte coincide con uno o más caracteres que no son paréntesis. La tercera parte es un subpatrón condicional que prueba si el primer conjunto de paréntesis
coincidió o no. Si lo hicieron, es decir, si el sujeto comenzó con un paréntesis de apertura, la condición es true
, y por lo tanto el yes-pattern se ejecuta y se requiere un paréntesis de cierre. De lo contrario, ya que no-pattern no está presente, el subpatrón coincide con nada. En otras palabras, este patrón coincide con una secuencia de caracteres no paréntesis, opcionalmente encerrada en paréntesis.
Si la condición es la cadena (R)
, se cumple si se ha realizado una llamada recursiva al patrón o subpatrón. En "nivel superior", la condición es falsa.
Si la condición no es una secuencia de dígitos o (R), debe ser una
afirmación. Esta puede ser una afirmación positiva o negativa de anticipación o retroceso. Considere este patrón, que nuevamente contiene espacio en blanco no significativo, y con las dos alternativas en la segunda línea:
La condición es una afirmación positiva de anticipación que coincide con una secuencia opcional de caracteres no letras seguida de una letra. En otras palabras, prueba la presencia de al menos una
letra en el sujeto. Si se encuentra una letra, el sujeto se compara con la primera alternativa; de lo contrario, se compara con la segunda. Este patrón coincide con cadenas en una de las dos formas dd-aaa-dd o dd-dd-dd, donde aaa son letras y dd son dígitos.