2008-12-12 30 views
33

¿Hay una expresión regular que coincida con expresiones regulares válidas?Regexp que coincide con las expresiones regulares válidas

(Sé que hay varios sabores de expresiones regulares. Uno haría.)

+11

Alguien tiene que leer "Godel Escher Bach, una trenza dorada eterna". –

+1

+1 para las tortugas hasta el final. – Gishu

+0

¿Por qué quieres una expresión regular? Quizás hay otra manera de resolver esto. –

Respuesta

38

Si simplemente desea comprobar si una expresión regular es válida o no, simplemente intente compilarla con el lenguaje de programación o la biblioteca de expresiones regulares con las que esté trabajando.

El análisis de expresiones regulares está lejos de ser trivial. Como el autor de RegexBuddy, he estado alrededor de ese bloque unas cuantas veces. Si realmente desea hacerlo, use una expresión regular para convertir la entrada en tokenize y deje la lógica de análisis en el código de procedimiento. Es decir, su expresión regular coincidiría con un token regex (^, $, \w, (, ), etc.) a la vez, y su código de procedimiento verificaría si están en el orden correcto.

+1

Hola Jan, Regexpbuddy se ve fantástico. Realmente tengo que conseguirlo pronto. ¡Gracias por tu comentario! – Thorsten79

-1

Dependiendo de su objetivo, diría definitivamente tal vez.

Si desea filtrar las expresiones regulares desde algún lugar, puede resultar difícil ya que las expresiones regulares vienen en todos los tamaños y formas y no todas comienzan y terminan con barras diagonales.

Si solo necesita saber si una expresión regular es válida, hay otra forma. Dependiendo del idioma que esté utilizando, podría intentar/atrapar

Si puede ser más específico, podría intentar dar una mejor respuesta, la pregunta es intruir.

15

Desafortunadamente, la mayoría de las expresiones regulares no válidas no son válidas debido a los errores de anidamiento entre paréntesis. Este es exactamente el tipo de cadenas que las expresiones regulares no pueden igualar. (De acuerdo, algunos sofisticados sistemas de expresiones regulares tienen extensiones de recursión, pero eso es raro)

5

Probablemente necesite un analizador sintáctico, no una expresión regular. Los regex son herramientas potentes, pero no son herramientas de análisis. No son adecuados para gramáticas anidadas, por ejemplo.

+0

Sí, eso es un eufemismo. Simplemente no pueden hacer gramáticas anidadas. – harms

9

Como ya he dicho, no puede describir expresiones regulares con una expresión regular debido a su naturaleza recursiva. Necesitarás una gramática libre de contexto para eso.

Pero, ¿cuál sería el sentido de tener una expresión tan regular, de todos modos? Si solo quiere comprobar si una expresión regular es correcta, simplemente puede intentar usarla (Pattern.compile (regexp) en Java) y si grita no es válida.

4

De Douglas Crockford El lenguaje de programación JavaScript de video 4 (de 4):

/\/(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/[gim]*/

http://video.yahoo.com/watch/111596/1710658 aproximadamente -17,20.

+3

¿Quieres dar una sinopsis en lugar de enviarme a un enlace de video? –

+1

@LFSR Consulting: No, yo no. Puse la información sobre la expresión regular en mi respuesta. El resto del video es irrelevante para esta pregunta. Me limité a dar información de citas. – kajaco

+0

FF3 arroja a la expresión regular anterior como sintácticamente incorrecta? – ThomasH

41

¿Hay una expresión regular que coincida con expresiones regulares válidas?

Por definición, es bastante simple: No.

El lenguaje de expresiones regulares todos es sin regular de la lengua (basta con mirar paréntesis anidados) y por lo tanto no puede haber una expresión regular de a analizarlo.

+2

+1 por tener la única respuesta correcta y al punto. –

+3

Apuesto a que alguien tiene una secuencia de comandos de Perl que puede hacerlo de todos modos – Decko

Cuestiones relacionadas