2012-01-25 11 views
33

Che cosa significa utilizzare un'espressione regolare backtracking?Nelle espressioni regolari, che cos'è un riferimento al backtracking/back?

Inoltre, potresti fornire un esempio di questo?

+0

Presupposto * backtrace * = backtracking, domanda simile: [Quale espressione regolare richiede il backtracking?] (Http://stackoverflow.com/questions/8132412/which-regular-expression-requires-backtracking) –

+0

Ah grazie. Sì. – chrisjlee

+0

Ci sono alcuni buoni esempi con spiegazione completa su http://www.regular-expressions.info/catastrophic.html – bkzland

risposta

53

I riferimenti secondari e il backtracking sono due cose diverse. Il primo utilizza i risultati di un'acquisizione successiva nel codice, ad es.

(['"]).*?\1 

Questo corrisponderà a una stringa singola o doppia (ignorando le fughe per il momento). Utilizza un backreference per fare riferimento al simbolo aperto (la virgoletta singola o doppia) in modo che possa corrispondere alla fine.

Backtracking, d'altra parte, è ciò che le espressioni regolari fanno naturalmente durante il processo di abbinamento quando una partita fallisce. Ad esempio, se sto corrispondenza l'espressione

.+b 

contro la stringa

aaaaaabcd 

allora sarà prima partita aaaaaabc sulla .+ e confrontare b contro il restante d. Ciò non riesce, quindi torna indietro un po 'e corrisponde a aaaaaab per .+ e quindi confronta l'b finale con lo c. Anche questo fallisce, quindi torna indietro e prova aaaaaa per il .+ e corrisponde allo b contro lo b e succede.

+0

Cool! Esempio.. – SIslam

Problemi correlati