2011-02-28 24 views
6

Bastante simple. ¿Cuál es la expresión regular más rápida que devolverá verdadero para cualquier entrada?C#. Regex más rápida para que coincida con cualquier cadena

Editar: ¿por qué baja el voto? Parece una pregunta muy legítima. Utilizo una función que toma un filtro de expresiones regulares y quiero saber qué hará que coincida con todo lo más rápidamente. "No usar una expresión regular" no es una respuesta.

+5

¿Has pensado en esto? Sueno tan útil como una tetera de chocolate. –

+12

... no usa una expresión regular? –

+2

¿Qué escenario del mundo real provocó esta pregunta? – Oded

Respuesta

4
class FastestRegex 
{ 
    public static readonly Regex RE = new Regex("", RegexOptions.Compiled); 
} 
+1

Sólo una nota por el gusto de hacerlo, pero también podría usar el caché Regex interno .NET y atenerse a las funciones estáticas en Regex – LorenVS

+0

@LorenVS: eso depende de cuántas expresiones regulares está creando y de qué tamaño He establecido para la memoria caché de expresiones regulares. Pero sabes ** que esta será reutilizada, ¿por qué no almacenarla en caché manualmente? –

1

diría que tendría que ser algo así como

.*? 

que comprobar si hay una coincidencia con cualquier carácter, pero debido a que el operador perezoso, coincidiría con ninguna cadena en absoluto. Me imagino que volvería incluso antes de comprobar el primer personaje. Esto supone que la cadena vacía no devuelve verdadero para todas las entradas.

1

supongo que o bien la cadena vacía, "", o la entrada de inicio de, "^", darían como resultado en el partido más rápida (positivo) de cualquier cadena.

Debe intentarlo usted mismo: ejecutando algunas pruebas rápidas, el patrón "^" es generalmente más rápido que "" en Oracle JRE 1.6, pero en Mono 2.4, es al revés. En ambos casos, .*? es manera más lenta.

Pero de nuevo: pruebe cosas en su propio sistema.

0

No existe la expresión regular más rápida que nunca ejecute expresiones regex. Por lo tanto, la expresión regular más rápida es la que realmente se ejecuta. /[\S\s]?/ o, supongo que esto es más rápido /.?/s

Addon - Interresting aunque /^/ banched fraccionalmente más rápido en perl en bucle 30 millones de veces. Sin embargo, precompilar todas las expresiones regex 'primero las ralentiza a todas por un factor de 5. Vaya figura. Tal vez porque es una expresión demasiado simple.

Cuestiones relacionadas