In che modo l'espressione regolare può essere ambigua?

1

Riconosco questo schema

<.*>

Dalla stringa

<a href="hello world">Hi Baby</a>

Ora, ci sono diverse corrispondenze

<a href="hello world"> è una corrispondenza

<a href="hello world">Hi Baby</a>

è anche una corrispondenza.

Tuttavia, questo è molto confuso. Ho pensato che l'espressione regolare venisse risolta con determinati automi finiti.

Quindi immagino che gli automatici definiti definitivi vadano a ogni lettera. uno per uno. Tuttavia, sarebbe in qualche modo succursale. Penserebbe che il primo > è arte della chiusura > nel modello. Può anche significare parte del. modello.

Quindi come decide?

In vb.net, sembra che il pattern che viene riconosciuto sia il secondo. Ecco perché devo sostituire il modello con

<[^>]*>

se voglio che il pattern corrisponda al primo (ad esempio, voglio eliminare tutti i tag html da una stringa)

E perché? Cosa fa realmente vb per selezionare la seconda stringa come quelli che corrispondono al modello?

Ho sentito dire che vb è "goloso". Corrisponde alla stringa più lunga che corrisponde al modello invece del primo modello di lavoro. Quindi uhmm ... è questo intrinsecamente ambiguo o esiste un modo in cui possiamo effettivamente implementarlo?

    
posta user4951 09.11.2015 - 09:23
fonte

1 risposta

1

Ci sono 2 modi regex corrispondenti a una stringa: controlla se la stringa intera corrisponde al pattern o trova la corrispondenza prima del pattern.

Il primo è spesso usato per la convalida dell'input.

Il secondo verrebbe utilizzato nell'analisi di ampie porzioni di testo per isolare parti interessanti per un'ulteriore analisi. Ciò restituirà la prima corrispondenza che riesce a trovare.

    
risposta data 09.11.2015 - 13:23
fonte

Leggi altre domande sui tag