Para el ejemplo que proporcione podría intentar utilizar un antipatrón para descalificar resultados no válidos. Por ejemplo, "^ [^ a]" le diría que su entrada "c ..." no puede coincidir con su patrón de ejemplo de "aabb".
Dependiendo de su patrón, puede dividirlo en patrones más pequeños para verificar y usar múltiples emparejamientos y luego establecer sus límites a medida que ocurre una coincidencia y pasar a la siguiente. Este enfoque puede funcionar, pero si su patrón es complejo y puede tener subpartes de longitud variable, puede terminar volviendo a implementar parte del marcador en su propio código para ajustar los límites posibles de la coincidencia y hacerlo más o menos ambicioso. Una idea general de pseudo-código de esto sería:
boolean match(String input, Matcher[] subpatterns, int matchStart, int matchEnd){
matcher = next matcher in list;
int stop = matchend;
while(true){
if matcher.matches input from matchstart -> matchend{
if match(input, subpatterns, end of current match, end of string){
return true;
}else{
//make this match less greedy
stop--;
}
}else{
//no match
return false;
}
}
}
A continuación, puede combinar esta idea con los anti-patrones, y tienen anti-sub-patrones y después de cada partido sub-patrón que comprobar la siguiente anti-patrón, si coincide con que sabe que ha fallado; de lo contrario, continúe el patrón de coincidencia. Es probable que desee devolver algo así como una enumeración en lugar de un booleano (es decir, ALL_MATCHED, PARTIAL_MATCH, ANTI_PATTERN_MATCH, ...)
De nuevo, dependiendo de la complejidad de su patrón real que está tratando de unir escribiendo los sub patrones apropiados/antipatrón puede ser difícil, si no imposible.
¿Qué regex has encontrado hasta ahora? –
Entonces, para que esto quede claro, ¿está buscando 'continuar con la expresión regular', por así decirlo, desde el punto en que lo dejó (sin rehacer la expresión regular en toda la cadena), en función de la información adicional del usuario? Si es así, eso no es posible, por razones que puedo explicar si confirma esto, a menos que especifique restricciones adicionales. – Cam
Haga que la parte 'bb' sea opcional' aa (bb)? ' – Amarghosh