2009-07-13 10 views
11

Estoy leyendo el documento PCRE, y se refiere a cuantificadores posesivos, pero no los define explícita o específicamente. Sé lo que es un cuantificador codicioso, y sé lo que es un cuantificador perezoso. Pero posesivo?¿Puede alguien explicarme los cuantificadores posesivos? (Expresiones regulares)

El PCRE man page parece estar haciendo trampa cuando utiliza el término sin definirlo. La página del manual indica específicamente que el término cuantificadores posesivos se definió por primera vez en Friedl's book. Bueno, eso es genial, pero no tengo el libro de Friedl, y al leer la página del manual, entre líneas, no puedo entender qué distingue a los cuantificadores posesivos de los codiciosos.

  • ? = cero o uno, codicioso
  • ?? = Cero o uno, perezoso
  • ? + = Cero o uno, posesivo
  • '+' = uno o más, codicioso
  • +? = Uno o más, perezoso
  • ++ = uno o más, posesiva
+0

Esta pregunta ha sido añadida a la [desbordamiento de pila FAQ expresión regular] (http://stackoverflow.com/a/22944075/2736496), en "Los cuantificadores> Más información sobre las diferencias ..." – aliteralmind

Respuesta

11

Tal vez el mejor lugar para empezar es Regex Tutorial - Possessive Quantifiers:

Cuando se habla de la repetición operadores o cuantificadores, expliqué la diferencia entre codicioso y perezoso repetición. La codicia y la pereza determinan el orden en que el motor regex prueba las posibles permutaciones del patrón de expresiones regulares. Un cuantificador codicioso primero intentará repetir el token tantas veces como sea posible, y ceda gradualmente las coincidencias como el motor para encontrar una coincidencia general . Un cuantificador perezoso primero repite el token las pocas veces que se requiera , y amplíe gradualmente la coincidencia a medida que el motor retrocede a través de la expresión regular para encontrar una coincidencia global.


cuantificadores posesivos son una manera de evitar que el motor de expresiones regulares de tratar todas las permutaciones. Esto es principalmente útil por razones de rendimiento . También puede usar cuantificadores posesivos para eliminar ciertas coincidencias .

+8

Ahh, ¡Ya veo! Después de leer ese tutorial, me parece perezoso no es lo opuesto a codicioso. Lazy debe llamarse "generosa" tal vez, y la forma posesiva en realidad debería llamarse floja, porque los cuantificadores posesivos se niegan a dar marcha atrás. No harán ningún trabajo extra, que es solo perezoso perezoso. – Cheeso

+4

cuantificadores posesivos se niegan a dar marcha atrás: esta es la mejor explicación que leí al respecto. gracias por resumirlo :) – vondip

Cuestiones relacionadas