Estoy haciendo esta pregunta porque noto que hay algunas diferencias leves en la sintaxis de RegEx entre diferentes idiomas. Me pregunto si existe un estándar RegEx que se mantenga en algún lugar. Y si es así, ¿dónde puedo encontrar este documento? Además, si creo una expresión RegEx en .NET, ¿se garantiza que la misma expresión sea 100% compatible y trabaje con otros lenguajes, como Perl o Javascript o Java? Finalmente, ¿hay alguna "mejores prácticas" cuando se trata de usar RegEx que puede ayudar a que sea más fácil de mantener en otros lenguajes de plataforma?Estándares RegEx en todos los idiomas
Respuesta
Uno de los conjuntos más antiguos de expresiones regulares estandarizadas es el POSIX BRE (expresiones regulares básicas) y ERE (expresiones regulares extendidas), documentado en Regular Expressions.
Otros idiomas pueden definir sus propios estándares. Por ejemplo, C++ 2011 tiene una biblioteca de expresiones regulares definida en la cláusula 28 (alrededor de 46 páginas de estándar). Perl define sus expresiones regulares. Otros idiomas toman prestado de estas fuentes y otras. Lex y Flex usan su propio conjunto de expresiones regulares. Sed usa su propia variante en expresiones regulares. Y Java, JavaScript y ... definen sus propias versiones, a veces usando PCRE (Perl-Compatible Regular Expressions) como base para su diseño. Algunos de los detalles se ven afectados por las facilidades proporcionadas por el idioma en el que se utilizan las expresiones regulares.
El libro de Jeff Friedl Mastering Regular Expressions abarca una gran cantidad de conjuntos diferentes de expresiones regulares, identificando lo que es común y lo que es diferente.
No, no existe tal estándar. Por supuesto hay PCRE, POSIX BRE, POSIX ERE, ...
Pero de hecho habrá diferencias "pequeñas" en cualquier idioma. Puede transmitir cosas muy básicas para la mayoría de los sabores, como el .
para cualquier carácter o los cuantificadores +*?
, las clases de caracteres también son comunes, pero ya comienza en clases predefinidas como \w
, ¿es compatible? o basado en ASCII o Unicode?
Una buena ayuda aquí es el flavor comparison on regular-expressions.info por Jan Goyvaerts.
Buenas Prácticas
Evitar el uso de positive-negative lookbehinds
y en algunos casos lookaheads
- 1. ¿Cómo puedo crear una Regex alfanumérica para todos los idiomas?
- 2. Características comunes a todos los sabores regex?
- 3. Compartir constantes en todos los idiomas
- 4. NSLocale: obtenga todos los idiomas disponibles
- 5. colación Mysql para todos los idiomas
- 6. Cómo obtener los idiomas disponibles (No todos, solo los idiomas disponibles en mi aplicación)
- 7. ¿Hay alguna manera de ordenar cadenas en todos los idiomas?
- 8. Buscando una lista de todos los idiomas disponibles en iOS
- 9. Regex para todos los caracteres de IMPRESIÓN
- 10. ¿Es suficiente UTF-8 para todos los idiomas comunes?
- 11. expresiones regulares: ¿lo mismo para todos los idiomas?
- 12. RegEx para reemplazar todos los caracteres, excepto los números
- 13. Regex para spliting en todos los puntos y comas
- 14. JS regex: reemplazar todos los dígitos en la cadena
- 15. "como si" en los estándares de lenguaje
- 16. vim regex incrementa todos los números por 1
- 17. ¿Regex Java para eliminar todos los números finales?
- 18. Javascript regex, reemplace todos los caracteres que no sean números
- 19. Regex reemplazar todos los caracteres de nueva línea con comas
- 20. Regex para eliminar todos los caracteres especiales de la cadena?
- 21. Eliminar todos los caracteres latinos exclusivos utilizando regex
- 22. Eliminar todos los caracteres especiales de una cadena en R?
- 23. StyleCop para otros idiomas
- 24. ¿Los contenedores estándares C++ 11 son "definitivos"?
- 25. ¿Los preprocesadores están obsoletos en los idiomas modernos?
- 26. Android cadena de matriz con todos los países en diferentes idiomas
- 27. Método programático para obtener todos los idiomas disponibles (en ensambles de satélite)
- 28. androide: gravedad = "derecho" no funciona en todos los dispositivos para el árabe y otros idiomas RTL
- 29. ¿Qué son los idiomas ISO?
- 30. Notepad ++ inverso Regex reemplazar (todos excepto cadena)
Ha votado para la referencia al libro de Friedl. – jlmcdonald
+1 para el libro de Jeff Friedl. También consulte Eche un vistazo a http://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines para una comparación. Para la mayoría de los propósitos prácticos, espero que sus expresiones regulares .Net, Java y Perl sean compatibles. Si sus expresiones regulares son complejas, puede tener problemas (como recursividad). –
JavaScript y Java implementan un subconjunto de PCRE, con JS implementa un subconjunto más pequeño. – nhahtdh