Sto cercando di utilizzare le espressioni regolari per determinare quale formato l'utente ha applicato quando si immette l'input in una casella di testo.
Le espressioni regolari sono i seguenti:Perché queste espressioni regolari vengono eseguite lentamente in Java?
(\\s?[" + alphabet + "]{9,9})+
Per determinare se l'input è una o più stringhe di lunghezza 9 in un dato alfabeto, eventualmente separati da spazi.
(>[\\w\\s]+\\n[" + alphabet + "\\s]+)+
Per verificare se l'ingresso è in FASTA format
Le espressioni regolari corrono terribilmente lento in caso di corrispondenza con . Perchè è questo?
Ho immaginato che ciò potrebbe essere dovuto a Java che memorizza tutte le potenziali corrispondenze (che non ho bisogno a questo punto), ma l'aggiunta di ?:
in ogni parentesi spezza la regex. Come dovrebbe essere fatto?
Grazie,
Martin
Edit 1: non sono riuscito a riprodurre il problema - succede solo su un computer. Questo potrebbe suggerire qualcosa di sbagliato in quella particolare configurazione VM.
Abbiamo bisogno di qualcosa di più robusto, e quindi lo implementeremo in modo diverso. Ho scelto la risposta di Joel come quella giusta, dal momento che credo che alcuni casi speciali in Pattern potrebbero essere la causa.
Quanti pattern si sta tentando potenzialmente di confrontare con ciascuna stringa di input? I modelli sono dinamici o statici? –
@Joel Esistono solo questi due modelli. Sono statici. L'uso di String.matches causerà ogni volta una compilazione, ma anche una corrispondenza con i pattern una sola volta richiede molto tempo (> 10 secondi per circa 300 caratteri immessi) –
puoi definire "terribilmente lento"? –