vscode visual studio regulares regular regexp expressions expresiones code regex language-agnostic

regex - visual - vs code regular expression



¿Características comunes a todos los sabores regex? (6)

He visto muchas cosas en común en las capacidades regex de diferentes herramientas / idiomas habilitados para expresiones regulares (por ejemplo, perl, sed, java, vim, etc.), pero también tengo muchas diferencias.

¿Existe un subconjunto estándar de capacidades regex que admitan todas las herramientas / idiomas habilitados para expresiones regulares? ¿Cómo varían las capacidades de expresiones regulares entre herramientas / idiomas?



La mayoría de las herramientas / lenguajes de expresiones regulares soportan estas capacidades básicas :

  1. Clases / conjuntos de caracteres y su negación - []
  2. Anclas - ^ $
  3. Alternancia - |
  4. Cuantificadores -? + * {N, m}
  5. Metacaracteres - / w, / s, / d, ...
  6. Backreferences - / 1, / 2, ...
  7. Punto -.
  8. Modificadores simples como / g y / i para el caso global e ignorar
  9. Personajes que escapan

Herramientas más avanzadas / soporte de idiomas:

  1. Lookaheads y detrás
  2. Clases de caracteres POSIX
  3. Límites de palabras
  4. Conmutadores en línea como permitir la insensibilidad de mayúsculas y minúsculas solo para una pequeña sección de la expresión regular
  5. Modificadores como / x para permitir formatos y comentarios adicionales, / m para multilínea
  6. Capturas nombradas
  7. Unicode

No hay un motor estándar. Sin embargo, el formato POSIX de expresión regular extendida es un subconjunto válido de la mayoría de los motores y probablemente esté lo más cerca posible de un subconjunto estandarizado.



Consulte la sintaxis de expresión regular de emacs: http://www.gnu.org/software/emacs/manual/html_node/emacs/Regexps.html#Regexps .

Recuerdo haber leído que la sintaxis de emacs es inamovible (por razones de compatibilidad con versiones anteriores), así que si quieres ser compatible con todo , haz que todo sea compatible con esto. Algunas herramientas pueden ser compatibles, otras no.

Si bien tienes un objetivo digno, creo que será extremadamente difícil de alcanzar, y también he encontrado que las expresiones regulares de emacs son un dolor con el que trabajar. ¿Tal vez el 99% de todo es lo suficientemente bueno si te hace más feliz y más productivo?


Si tomaste la gramática gregaria gramática, no la egrep, o la gramática sed regexp y la usaste, deberías estar usando un subconjunto seguro en muchas plataformas y herramientas.

Lo único que puede morderte entonces es cuando cambias entre las implementaciones de expresiones regulares usando autómatas de estados finitos (FSA) y las que usan retrocesos, por ejemplo, las implementaciones de cuantificadores varían de grep a Perl.

Las implementaciones basadas en FSA encontrarán la coincidencia más larga comenzando en la primera posición posible. Los que retroceden encontrarán la primera coincidencia sesgada hacia la izquierda, comenzando en la primera posición posible. Es decir, probará cada rama en el orden del patrón hasta que se encuentre una coincidencia.

Considere la cadena "xyxyxyzz" y el patrón "(xy)*(xyz)?" . Los motores basados ​​en FSA coincidirán con la subcadena más larga posible, "xyxyxyz" . Los motores basados ​​en seguimiento posterior coincidirán con la primera subcadena sesgada a la izquierda, "xyxyxy" .