Esistono strumenti che richiedono una particolare espressione regolare e restituiscono lo scenario peggiore in termini di numero di operazioni richieste per un determinato numero di caratteri con cui viene confrontata l'espressione regolare?Analisi dei casi peggiori per le espressioni regolari
Quindi, ad esempio, dato un (f|a)oo.*[ ]baz
, quanti passaggi potrebbero passare il motore attraverso i 100 caratteri?
Sarei anche interessato se c'è uno strumento che può richiedere un mucchio di campioni di testo e mostrare le operazioni medie per ciascuna analisi.
Mi rendo conto che questo dipenderà molto dal motore utilizzato e dall'implementazione, ma sono ignorante su quanto sia comune. Quindi, se è comune a molte lingue (rendendo la mia domanda troppo vaga) sarei particolarmente interessato a Perl e Python.
Ottima domanda! Ovviamente dipenderà dalla regex. È risaputo che le regex pure (anche come l'esempio '(x + x +) + y 'di cui sotto) ammettono un automa di macchina allo stato finito puro, ma che le normali librerie regex implementano effettivamente quelle con backtracking, in gran parte per supportare l'immaginazione roba come il contesto. Uno strumento come quello che descriveresti sarebbe bello da cogliere http://en.wikipedia.org/wiki/Regular_expression_Denial_of_Service_-_ReDoS –