Corrispondenza multi espressioni - cosa fare per ottimizzarlo?

0

Ho più regex che corrispondono a un input in modalità avido-prima. Tutte le regex sono già state compilate e non vedo cosa posso fare di più per accelerare le cose. Intendo usare gli strumenti forniti con .Net framework.

Dal momento che non faccio alcun rimpiazzo o cattura, mi chiedo se abbia senso costruire la mia corrispondenza di espressioni regolari - in risultato eseguirò la corrispondenza solo una volta (per multi-regex) invece di multi matching (per ogni singola regex).

Sto pensando troppo lontano? C'è un altro modo per velocizzarlo?

    
posta greenoldman 06.12.2013 - 14:53
fonte

2 risposte

2

la maggior parte dei motori regex utilizza un meccanismo di backtracking che può rallentare gli input errati (chiamati backtracking catastrofici). Non so se C # fa ma la mia ipotesi è che lo faccia. Leggi questo articolo se vuoi saperne di più

un modo per risolverlo è sintonizzare le espressioni regolari per evitare il trabocchetto di backtracking

un altro è usare un motore regex che crea un DFA e non ha bisogno di tornare indietro (non è possibile quando usi i backrefs ma non lo fai) o crea il tuo DFA personale

    
risposta data 06.12.2013 - 15:08
fonte
1

All regexes are already compiled and I don't see what I can do more to speed-up things.

Riutilizza Regex oggetti? La compilazione non accelera le cose se non lo fai; Al contrario.

Vedi link per riferimento.

Il modello è complesso? A volte le espressioni regolari sono troppo pesanti per il lavoro. Se la corrispondenza non è così sofisticata, sarebbe sicuramente più veloce implementarla "manualmente", con un loop e qualche logica fatta a mano ecc.

    
risposta data 06.12.2013 - 15:00
fonte

Leggi altre domande sui tag