Ho testo sto cercando di estrarre da LogicalID
e SupplyChain
daPerché il quantificatore di stelle è più avido del quantificatore plus nelle espressioni regolari Java?
<LogicalID>SupplyChain</Logical>
All'inizio ho utilizzato la seguente espressione regolare:
.*([A-Za-z]+)>([A-Za-z]+)<.*
Questo abbinato come segue:
["D", "SupplyChain"]
In un impeto di disperazione, ho provato a usare l'asterisco invece del vantaggio:
.*([A-Za-z]*)>([A-Za-z]+)<.*
Questo corrisponde perfettamente.
La documentazione dice *
corrisponde a zero o più volte e +
corrisponde a una o più volte. Perché *
è più avido di +
?
EDIT: Mi è stato fatto notare che questo non è il caso qui sotto. L'ordine delle operazioni spiega perché il primo gruppo di partite è effettivamente nullo.
Cosa intendi per avido? Hai provato a cambiare i posti '. *' Con '. +'? Sembra che non sia l'avidità, ma l'ordine di collocarli qui conta. – Pshemo
Sembrava avidità, ed è in realtà l'ordine di esecuzione. Ho raccolto questo nella risposta qui sotto da @Airos. – duber
Mettendo '?' Dopo '*' nella tua prima espressione regolare farà funzionare anche questa corrispondenza, cioè '. *? ([A-Za-z] +)> ([A-Za-z] +) <. *' . Lo sottolineo solo perché potrebbe aiutarti a capire come funzionano le cose, ma la risposta di @ anubhava è probabilmente migliore, a seconda delle tue esigenze. – ajb