l retroceso catastrófico no debería estar sucediendo en esta expresión regular
¿Alguien puede explicar por qué el motor de expresiones regulares de Java entra en modo de retroceso catastrófico en esta expresión regular? Cada alternancia es mutuamente exclusiva con cualquier otra alternancia, por lo que puedo decir.
^(?:[^'\"\\s~:/@#\\|\\^\\&\\[\\]\\(\\)\\\\\\{\\}][^\"\\s~:/@#\\|\\^\\&\\[\\]\\(\\)\\\\\\{\\}]*|
\"(?:[^\"]+|\"\")+\"|
'(?:[^']+|'')+')
Texto:'pão de açúcar itaucard mastercard platinum SUSTENTABILIDADE])
Agregar una coincidencia posesiva a algunas de las alternancias soluciona el problema, pero no tengo idea de por qué: la lib de expresiones regulares de Java debe ser extremadamente defectuosa para dar marcha atrás en ramas mutuamente excluyentes.
^(?:[^'\"\\s~:/@#\\|\\^\\&\\[\\]\\(\\)\\\\\\{\\}][^\"\\s~:/@#\\|\\^\\&\\[\\]\\(\\)\\\\\\{\\}]*|
\"(?:[^\"]++|\"\")++\"|
'(?:[^']++|'')++')