Se si dispone di diverse centinaia di parole, è necessario fare attenzione all'ordinamento delle parole nella regex. Il motore regex cerca le parole da sinistra a destra.
Se si verifica la parola setValue
contro l'alternanza set|setValue
, corrisponderà solo alle 3 lettere che comprendono "set" e non all'intera stringa.
Vedere questo link (da www.regular-expressions.info) per la spiegazione completa.
Non penso che il motore regex ottimizzi realmente le alternanze (ad esempio, analizzando i prefissi comuni e costruendo nfa di conseguenza). Pertanto, con così tante parole, non penso che sarà un'ottimizzazione.
Oltre a riordinare le parole, è anche possibile provare ad aggiungere un limite di parola o linea dopo l'alternanza, ad es. (set|setValue)$
, ma ho il sospetto che il motore regex farà un sacco di backtracking quindi potrebbe non valerne la pena.
[There] (http://www.javaworld.com/javaworld/jw-09-2007/jw-09-optimizingregex.html?page=2) dice: _ Attenzione all'alternanza. Le espressioni regolari come "(X | Y | Z)" hanno la reputazione di essere lente, quindi fai attenzione a loro_ – millebii
** [...] invece di "(abcd | abef)" usa "ab (cd | ef)" [...] "* - Questa è la forma più banale di ottimizzazione e sarei molto sorpreso se il motore regex di Java non lo eseguisse. – aioobe
@aioobe non molto utile, con diverse centinaia di parole come si fa – millebii