acabo encontrado un fallo en algún código que no he escrito y estoy un poco sorprendido:¿No deberían los patrones "estáticos" ser siempre estáticos?
Pattern pattern = Pattern.compile("\\d{1,2}.\\d{1,2}.\\d{4}");
Matcher matcher = pattern.matcher(s);
A pesar de que este código no mal en los datos de entrada obtenemos (porque se trata de encontrar fechas en el formato 17.01.2011 y vuelva cosas como 10396/2011 y luego se estrelló debido a que no puede analizar la fecha, pero que realmente no es el punto de esta pregunta;) me pregunto:
no es uno de los puntos de Pa ttern.compile para ser una optimización de velocidad (por pre-compilación de expresiones regulares)?
no debería todo el patrón "estático" ser siempre ¿compilado en el patrón estático?
Hay tantos ejemplos, todos alrededor de la web, donde el mismo patrón siempre se vuelve a compilar utilizando Pattern.compile que empiezo a preguntarme si estoy viendo cosas o no.
no es (suponiendo que la cadena es estática y por lo tanto no construye dinámicamente):
static Pattern pattern = Pattern.compile("\\d{1,2}.\\d{1,2}.\\d{4}");
siempre preferible más de una referencia patrón no estática?
El error en el patrón es que '.' coincide con cualquier cosa. Use '\ .' (o mejor' \\. '; La primera barra invertida es para Java) para arreglar eso. –
@Donal Fellows: muchas gracias, sé que sé, solo quería pegar el código roto mientras lo leía. Para mí hay ** dos ** WTF en este código: primero que la compilación de patrones no es estática y luego que es una especie de problema * regexp-ahora-tienes-dos-problemas * :) – Gugussee
Todo las respuestas que dicen que compilar estáticamente es mejor son correctas. Pero hay un poco de optimización prematura aquí. Si ve muchos ejemplos en la web usando Pattern.compile no estáticamente, es probable que sea porque simplemente no es un cuello de botella muy a menudo, y puede ser un poco más fácil de leer o mantener de esa manera. Mida siempre antes de optimizar, de lo contrario, puede descubrir que el tiempo dedicado simplemente a explorar el problema fue mayor que todo el tiempo de CPU que su programa pasará en Pattern.compile juntos :-). – Avi