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?
18
A
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);
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
- 1. ¿Qué significa $ 1, $ 2, etc. en Expresiones regulares?
- 2. Regex para 1 o 2 dígitos, opcional no alfanumérico, 2 alphas conocidas
- 3. 1 + 1/2 + 1/3 + --- + 1/n =?
- 4. PHP: cómo llenar una matriz con claves y valores de modo 1 = 1, 2 = 2, 3 = 3, etc.
- 5. Verificación de línea Regex en/etc/passwd
- 6. En Javascript, ¿por qué [1, 2] == [1, 2] o ({a: 1}) == ({a: 1}) es falso?
- 7. Selenium 1 vs 2
- 8. ¿Cuál es la prueba de (N-1) + (N-2) + (N-3) + ... + 1 = N * (N-1)/2
- 9. ¿Para qué sirven los códigos de error HTTP 404, 1, 404, 2, etc.?
- 10. Formato numérico: cómo convertir 1 a "01", 2 a "02", etc.?
- 11. ¿Qué es/dev/null 2> & 1?
- 12. Javascript regex devuelve verdadero ... luego falso ... luego verdadero ... etc.
- 13. android.os.StrictMode instances = 2; limit = 1
- 14. Struts 1.x vs Struts 2.x
- 15. Generador de consultas Regex con Doctrine 2?
- 16. Cómo asignar dinámicamente el hash con $ 1, $ 2, $ 3
- 17. regex para al menos 2 espacios vacíos?
- 18. Cadena de formato convertido xxx1, xx10 o 1 ###, 10 ## etc.
- 19. Suma de series: 1^1 + 2^2 + 3^3 + ... + n^n (mod m)
- 20. Transformar [: uno, 1,: dos, 2] a {: uno => 1,: dos => 2} en Ruby
- 21. OpenGL 2 texturas formatos internos GL_RGB8I, GL_RGB32UI, etc.
- 22. Volver primero desde 1, 2 de 2, ..., 11 de 11,
- 23. CharField max_length 2^n vs 2^n-1
- 24. Patrón Regex para editar el archivo/etc/sudoers
- 25. RegEx para todas las letras (incluidos chino, griego, etc.)
- 26. Java fusionar 2 colecciones en O (1)
- 27. lo que es la cuenta (*)% 2 = 1
- 28. ¿Linq en 2 matrices en 1 bucle?
- 29. awk '{print $ 2, ",", $ 1}' en Emacs Lisp?
- 30. EasyMock: java.lang.IllegalStateException: 1 emparejador esperado, 2 registrado
eso ayuda mucho pero pensé que las variables no se expanden entre comillas simples, sin embargo, funciona cuando lo pruebo ¿por qué es que –
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
Ok, eso tiene sentido. ¡Muchas gracias! –