Buscar..


Observaciones

NB emulando cuantificadores posesivos.

Uso básico de cuantificadores posesivos

Los cuantificadores posesivos son otra clase de cuantificadores en muchos tipos de expresiones regulares que permiten que el retroceso se deshabilite, efectivamente, para un token dado. Esto puede ayudar a mejorar el rendimiento, así como a prevenir coincidencias en ciertos casos.

La clase de cuantificadores posesivos se puede distinguir de los cuantificadores perezosos o codiciosos mediante la adición de a + después del cuantificador, como se ve a continuación:

Cuantificador Codicioso Perezoso Posesivo
Cero o mas * *? *+
Uno o mas + +? ++
Cero o uno ? ?? ?+

Considere, por ejemplo, los dos patrones ".*" Y ".*+" , Que operan en la cadena "abc"d . En ambos casos, el " al principio de la cadena coincide", pero después de eso los dos patrones tendrán diferentes comportamientos y resultados.

El codificador codicioso luego sorbirá el resto de la cadena, abc"d . Debido a que esto no coincide con el patrón, entonces retrocederá y caerá la d , dejando el cuantificador que contiene abc" . Debido a que esto aún no coincide con el patrón, el cuantificador eliminará el " , dejando que contenga solo abc . Esto coincide con el patrón (ya que " coincide con un literal, en lugar del cuantificador), y el regex informa de éxito.

El cuantificador posesivo también absorberá el resto de la cadena, pero, a diferencia del cuantificador codicioso, no retrocederá. Dado que su contenido, abc"d , no permite el resto del patrón de la coincidencia, la expresión regular se detendrá e informará que la falla no coincide.

Debido a que los cuantificadores posesivos no hacen retroceso, pueden resultar en un aumento significativo del rendimiento en patrones largos o complejos. Sin embargo, pueden ser peligrosos (como se ilustra arriba) si uno no es consciente de cómo, precisamente, los cuantificadores funcionan internamente.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow