2008-10-31 6 views
11

¿Ya usó los verbos de control de retroceso Perl 5.10 en sus expresiones regulares? ¿Y qué problemas te ayudaron a lograr?¿Ya usó los verbos de control de retroceso Perl 5.10 en sus expresiones regulares?


Al igual que en el fondo: He hecho algunas modificaciones, pero no puedo obtener resultados realmente útiles.

Como comparación, cuando comencé a obtener lo que hizo la agrupación (?>, comenzó a aparecer más en mis expresiones regulares. Me gustó la idea de ajustar el mundo de Perl regex a un conjunto particular de suposiciones. A medida que los lenguajes de ER se vuelven más destacados, el retroceso ha hecho que el rendimiento de las ER sea tremendamente divergente de la FSA pobre y media en la que se basan.


Cuando alguien me puede decir lo que otra aplicación de cosa ha retroceso verbos de control - y PCRE qué no, puedo conceder que pertenece en el área general de la experiencia de las personas con conocimientos sobre expresiones regulares. Esta es una pregunta de expresiones regulares Perl, y los chicos que ayudan a personas con Ruby, Python, C#, Javascript o cualquier implementación de cliente PCRE probablemente no pueden ayudar o lo ven como una pérdida de espacio para las etiquetas que normalmente leen .

+0

¿Necesitamos crear una etiqueta para [perl-regex]? –

+1

Hay demasiadas publicaciones específicas de implementación bajo la etiqueta de expresión regular. Algunas personas dicen "Solo Java" o "In C#, ...." Así que me molesta, por lo que sé, solo Perl tiene estos verbos, por lo que es específico de Perl. – Axeman

+0

No veo cómo "las respuestas a la pregunta tenderán a basarse casi por completo en opiniones" es incluso una crítica creíble. Una aplicación presentada usa verbos de expresiones regulares o no, funciona o no, de manera similar a las "soluciones" presentadas a otras preguntas. Y si resuelve un problema * significativo * o no, también está sujeto al mismo tipo de subjetividad que el sistema de votación encapsula a la hora de decidir si una "solución" se ajusta a la pregunta. – Axeman

Respuesta

2

Sí, lo tengo, aunque no demasiado. Los uso para controlar el retroceso, generalmente para forzarlo a hacer más permutaciones. Aquí hay un amusing solution y aquí hay un practical one.

+1

Por fin, estoy aprendiendo a usar algunos verbos de expresiones regulares. Gracias a usted y también gracias a lo que parece ser una sección expandida en ('perlre') [http://perldoc.perl.org/perlre.html) (pero tal vez sea usted también), de hecho se me ocurrió esta alternativa RE para la segunda solución: 'qr {x (* PRUNE) (a? B? C?) (? (? {$ 1}) | (* FAIL))} x'. – Axeman

1

Honestamente, aún no he usado 5.10 mucho. Tan genial como algunas de las nuevas características, solo las uso en scripts personales. Para la producción apunto compatibilidad con 5.8. Para CPAN I objetivo 5.6. Esto me ha impedido jugar con la mayoría de los juguetes nuevos.

Las funciones de control de retroceso son interesantes, pero no puedo ver muchas aplicaciones fuera de los analizadores. No puedo imaginar meter un analizador completo en una sola expresión regular. (¡Incluso si admiten la recursión ahora!) Estoy mucho más entusiasmado con las gramáticas Perl6.

+0

Estoy de acuerdo con las gramáticas. Pero los verbos nos dan un poco de eso ahora. – Axeman

+1

Lo hacen, pero parece más un adelanto que algo inmediatamente útil. También está ese pequeño "ADVERTENCIA: estos patrones son experimentales y están sujetos a cambio o eliminación ..." advertencia en perlre. –

+0

5.10.0 es la versión mínima que programo en estos días. Es demasiado difícil hacer cosas razonables antes que eso. Lo necesito para una mejor compatibilidad con expresiones regulares y una mejor compatibilidad con Unicode. – tchrist

2

Han pasado años desde que hice alguna programación de Perl, así que ni siquiera sabía acerca de esta característica hasta que la mencionó. Parece una de esas características hardcore que solo utilizarían los gurús de expresiones regulares (por supuesto, la comunidad de Perl tiene muchas). Perl 6 Grammars, por otro lado, parece que será muy divertido jugar con ellos.

Por ahora, estoy contento con los grupos atómicos y los cuantificadores posesivos. De hecho, soy prácticamente adicto a ellos. Ha llegado al punto en el que intento reflexivamente escribir expresiones regulares de tal forma que nunca retrocedan. Debo recordar a veces que retroceder es aceptable en pequeñas dosis, y no vale la pena el esfuerzo eliminarlo por completo.

p.s., hasta donde yo sé, los cuantificadores posesivos solo son compatibles con Java, PCRE (PHP, Apache, Flex 3/ActionScript 3) y el motor de expresiones regulares JGSoft utilizado por RegexBuddy, EditPad Pro y PowerGrep.

actualización: El sabor Oniguruma (utilizado en Ruby 1.9+ y TextMate) admite tanto grupos atómicos como cuantificadores posesivos. Y, por supuesto, Perl 5.10 los respalda además de los verbos de control de retroceso.

Cuestiones relacionadas