Estoy usando Pattern.matches de java para hacer coincidir un bloque de datos con una expresión regular. El bloque de datos puede ser una sola línea o múltiples líneas. El problema es que una vez que mis datos se convierten en más de 15 líneas (típicamente más de 17-18 líneas), empiezo a recibir stackoverflowerror. Para datos de menos de 15 líneas, la expresión regular funciona bien.Pattern.matches() da StackOverflowError
la expresión regular es de este formato:
nombre de dominio -> espacio ->, -> espacio -> número -> espacio ->, -> espacio -> número -> nueva línea
String regex = "^(([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+([a-zA-Z]{2,})\\s*,\\s*\\d+\\s*,\\s*\\d+(\\r?\\n)?)+$";
Los datos bloque que utilizo para la prueba en contra de esta expresión regular es este
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
este es el código:
String regex = "^(([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+([a-zA-Z]{2,})\\s*,\\s*\\d+\\s*,\\s*\\d+(\\r?\\n)?)+$";
boolean valid = Pattern.matches(regex, data); //fails here
+1 por encontrarse realmente con este error del mismo nombre en la naturaleza. :) – Xion
Consejos 1) No tienes que escapar de '-' aquí:' [a-zA-Z0-9 \\ -] '(es decir:' a-zA-Z-] 'funciona 2) Hay no es necesario utilizar '^' y '$' cuando está utilizando '.matches()' – NullUserException
¿Necesita los grupos o los grupos que no capturaron funcionarán también? Si es así, reemplace '(' con '(?:' . – Thomas