2010-02-19 10 views
11

Me pregunto por qué tiene que haber tantos dialectos de expresiones regulares. ¿Por qué parece que muchos idiomas, en lugar de reutilizar un dialecto probado y verdadero, parecen empeñados en escribir el suyo propio?¿Por qué hay tantos dialectos de expresiones regulares diferentes?

Like these.

Quiero decir, entiendo que algunos de ellos sí tienen muy diferentes backends. Pero, ¿no debería ser eso abstraído del programador?

Me refiero más a las diferencias extrañas pero pequeñas, como cuando los paréntesis se tienen que escapar en un idioma, pero son literales en otro. O donde los metacaracteres significan cosas algo diferentes.

¿Hay alguna razón en particular por la que no podamos tener algún tipo de dialecto universal para las expresiones regulares? Creo que haría las cosas mucho más fáciles para los programadores que tienen que trabajar en varios idiomas.

+0

No sé, tal vez los desarrolladores de cada dialecto pensaron que el suyo era mejor que todos los demás, o tal vez se ajustaba a una necesidad específica en ese momento que otros aún no soportaban, y luego, cuando otros decidieron implementar esas características, pensaron podrían hacerlo mejor. No es como si hubiera un Comité de Gobierno de Regex Central. – FrustratedWithFormsDesigner

+2

¿No sería eso lo que se supone que es Posix :-)? – BigBeagle

+0

http://stackoverflow.com/a/11857890/874188 tiene un poco de antecedentes históricos si eso es lo que buscas. – tripleee

Respuesta

9

porque las expresiones regulares sólo tienen tres operaciones:

  • concatenación
  • Unión cierre |
  • Kleene *

Todo lo demás es una extensión o azúcar sintáctico, y por lo tanto no tiene una fuente para la estandarización. Cosas como capturar grupos, referencias hacia atrás, clases de personajes, operaciones de cardinalidad, etc. son todas adiciones a la definición original de expresiones regulares.

Algunas de estas extensiones hacen que las "expresiones regulares" ya no sean regulares. Pueden decidir idiomas no habituales debido a estos extras, pero aún así los llamamos expresiones regulares.

Como las personas agregan más extensiones, a menudo intentarán usar otras variaciones comunes de expresiones regulares. Es por eso que casi todos los dialectos usan X+ para significar "una o muchas X", que a su vez es solo un atajo para escribir XX*.

Pero cuando se agregan nuevas funciones, no hay base para la estandarización, por lo que alguien tiene que inventar algo. Si más de un grupo de diseñadores presentan ideas similares al mismo tiempo, tendrán diferentes dialectos.

3

Por la misma razón, tenemos tantos idiomas. Algunas personas intentarán mejorar sus herramientas y, al mismo tiempo, otras serán resistentes al cambio. C/C++/Java/C# ¿alguien?

1

El síndrome de programación "lo hice mejor" produce todas estas cosas. Es lo mismo con los estándares. La gente intenta hacer el siguiente "mejor" estándar para reemplazar a todos los demás y simplemente se convierte en algo más para lo que todos tenemos que aprender/diseñar.

1

Creo que una buena parte de esto es la cuestión de quién sería responsable de establecer y mantener la sintaxis estándar y garantizar la compatibilidad en diferentes entornos.

Además, si una expresión regular debe ser analizada dentro de un intérprete/compilador con sus propias reglas únicas con respecto a la manipulación de cadenas, esto puede causar una necesidad de hacer las cosas de manera diferente con escapes y literales.

Una buena estrategia es tomarse el tiempo para comprender cómo funcionan los algoritmos de expresiones regulares en un nivel más abstracto, y luego implementar cualquier sintaxis particular se vuelve mucho más fácil. Similar a cómo cada lenguaje de programación tiene su propia sintaxis para construcciones como sentencias condicionales y bucles, pero aún logran la misma tarea abstracta.

Cuestiones relacionadas