Sto cercando di migliorare le prestazioni di alcuni codici. Sembra qualcosa di simile:Come determinare se una stringa non è un'espressione regolare?
public boolean isImportant(String token) {
for (Pattern pattern : patterns) {
return pattern.matches(token).find();
}
}
Quello che ho notato è che molti dei modelli sembrano essere semplici stringhe letterali senza costrutti di espressione regolari. Quindi voglio archiviare semplicemente questi in un elenco separato (importantList) e fare un test di uguaglianza invece di eseguire un pattern match più costosi, come ad esempio segue:
public boolean isImportant(String token) {
if (importantList.contains(token)) return true;
for (Pattern pattern : patterns) {
return pattern.matches(token).find();
}
}
Come faccio a livello di programmazione determinare se una particolare stringa non contiene costrutti di espressione regolare?
Modifica: Devo aggiungere che la risposta non deve essere sensibile alle prestazioni. (Ad esempio, le espressioni regolari possono essere utilizzate) Mi interesso principalmente delle prestazioni di isImportant() perché è chiamato milioni di volte, mentre l'inizializzazione dei pattern viene eseguita una sola volta.
Non eseguire un'espressione regolare su una stringa per determinare se si tratta di un'espressione regolare ogni volta è molto peggio che utilizzare ogni stringa come espressione regolare? –
@ Mike: Non è quello che sta chiedendo. "ciao" è un'espressione regolare perfettamente valida. –
Non possibile (non è facile né utile, a meno che non si trovi qualche schema in normali stringhe di stringa). Una semplice stringa letterale è un modello di regex valido. – AC1