Ho fatto un po 'di lavoro con regex durante la scorsa settimana e sono riuscito a fare molti progressi, tuttavia, sono ancora abbastanza n00b. Ho una regex scritto in C#:Espressioni regolari in C# che funzionano lentamente
string isMethodRegex =
@"\b(public|private|internal|protected)?\s*(static|virtual|abstract)?"+
@"\s*(?<returnType>[a-zA-Z\<\>_1-9]*)\s(?<method>[a-zA-Z\<\>_1-9]+)\s*\"+
@"((?<parameters>(([a-zA-Z\[\]\<\>_1-9]*\s*[a-zA-Z_1-9]*\s*)[,]?\s*)+)\)";
IsMethodRegex = new Regex(isMethodRegex);
Per qualche ragione, quando si chiama l'IsMethodRegex.IsMatch espressione regolare() si blocca per 30 + secondi sul seguente stringa:
"\t * Returns collection of active STOP transactions (transaction type 30) "
C'è qualcuno come le parti interne di Regex funzionano e perché questo sarebbe così lento nell'accoppiare questa stringa e non con altre. Ho avuto un gioco con esso e ho scoperto che se ho eliminato * e la parentesi, allora funziona bene. Forse l'espressione regolare è scritta male?
Qualsiasi aiuto sarebbe molto apprezzato.
Hai provato a compilare la regex? Uno dei sovraccarichi del costruttore fornisce questa capacità. –
@Steve: mi sono appena messo alla prova e dopo averlo compilato ci vuole ancora molto tempo. Posso riprodurre il lungo tempo sulla mia macchina in LinqPad. – mellamokb
So che questo è oltre il punto, ma la tua regex mi sembra molto fragile. In qualche modo penso che le prestazioni siano l'ultimo dei tuoi problemi. – ChaosPandion