Ricerca…


Osservazioni

NB Emulazione di quantificatori possessivi

Uso di base dei quantificatori possessivi

Quantificatori possessivi sono un'altra classe di quantificatori in molti sapori regex che consentono di tornare indietro, efficacemente, per un dato token. Questo può aiutare a migliorare le prestazioni, oltre a prevenire le partite in determinati casi.

La classe dei quantificatori possessivi può essere distinta dai quantificatori pigri o avidi mediante l'aggiunta di un + dopo il quantificatore, come mostrato di seguito:

Quantificatore avido Pigro Possessivo
Zero o più * *? *+
Uno o più + +? ++
Zero o uno ? ?? ?+

Consideriamo, ad esempio, i due modelli ".*" E ".*+" , Che operano sulla stringa "abc"d . In entrambi i casi, " all'inizio della stringa è abbinato, ma dopo di ciò i due modelli avranno comportamenti e risultati diversi.

Il quantificatore goloso triturerà quindi il resto della stringa, abc"d . Perché questo non corrisponde al modello, quindi farà retrocedere e rilasciare d , lasciando il quantificatore contenente abc" . Poiché questo non corrisponde ancora al modello, il quantificatore rilascia " il valore " , lasciandolo contenente solo abc . Questo corrisponde al modello (poiché " corrisponde a un valore letterale anziché al quantificatore) e l'espressione regolare segnala il successo.

Il quantificatore possessivo sfrutterà anche il resto della stringa, ma, a differenza del quantificatore avido, non tornerà indietro. Dato che il suo contenuto, abc"d , non consente il resto del pattern della corrispondenza, la regex si interromperà e il report non coincide.

Poiché i quantificatori possessivi non eseguono il backtracking, possono comportare un significativo aumento delle prestazioni su modelli lunghi o complessi. Possono, tuttavia, essere pericolosi (come illustrato sopra) se non si è consapevoli di come, precisamente, i quantificatori lavorano internamente.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow