2010-12-26 13 views
18

He estado tratando de hacer algunas operaciones de expresiones regulares en PHP, y no soy muy hábil en esta área. Parece que cuando uso una función de expresión regular como preg_replace en una cadena, puedo acceder a las cadenas regex-reemplazadas por algún tipo de variables llamadas $ 1, $ 2, y así sucesivamente. ¿Cómo se llama esto y cómo puedo usarlo?

Respuesta

31

Se conocen en la terminología de expresiones regulares como referencias posteriores (más sobre eso here). Los usa para referirse a grupos de captura (o subpatrones, rodeados por ()) dentro de su expresión regular o en la cadena de reemplazo.

Un ejemplo:

/* 
* Replaces abcd123 with 123abcd, or asdf789 with 789asdf. 
* 
* The $1 here refers to the capture group ([a-z]+), 
* and the $2 refers to the capture group ([0-9]+). 
*/ 
preg_replace('/([a-z]+)([0-9]+)/', '$2$1', $str); 
+0

eso ayuda mucho pero pensé que las variables no se expanden entre comillas simples, sin embargo, funciona cuando lo pruebo ¿por qué es que –

+2

Como referencias hacia atrás PCRE, pasan a denominarse '$', pero no tienen nada que ver con las variables de PHP. Se ven y reemplazan por el motor de expresiones regulares, no PHP. – BoltClock

+0

Ok, eso tiene sentido. ¡Muchas gracias! –

6

Se llaman referencias hacia atrás y coinciden con los elementos dentro de la expresión regular agrupan.

Si rodea una parte de la expresión regular con los soportes, a continuación, se puede hacer referencia a ella en la sección de reemplazar (o incluso más tarde en la misma expresión regular, por la referencia hacia atrás que corresponde a su posición.

forma Slash, o en forma de dólar puede ser utilizado en reemplazos:!.?

\1, \2 == $1, $2 
Cuestiones relacionadas