mam tekst Próbuję wydobyć z LogicalID
i SupplyChain
zDlaczego kwantyfikator gwiazdowy jest bardziej żarłoczny niż kwantyfikator plus w wyrażeniach regularnych Java?
<LogicalID>SupplyChain</Logical>
Na początku użyłem następujące wyrażenia regularnego:
.*([A-Za-z]+)>([A-Za-z]+)<.*
dopasowanych następująco:
["D", "SupplyChain"]
W desperacji próbowałem użyć gwiazdki zamiast plusa:
.*([A-Za-z]*)>([A-Za-z]+)<.*
To idealnie pasuje.
Dokumentacja mówi, że *
mecze zero lub więcej razy i +
mecze jeden lub więcej razy. Dlaczego jest *
chciwsza niż +
?
EDYCJA: Zostało mi wskazane, że tak nie jest. Kolejność operacji wyjaśnia, dlaczego pierwsza grupa dopasowania jest rzeczywiście pusta.
Co masz na myśli przez chciwego? Czy próbowałeś zmienić miejsce '. *' Z '. +'? Wygląda na to, że to nie jest chciwość, ale ważny jest tutaj porządek ich umieszczania. – Pshemo
Wyglądało to jak chciwość, a to w rzeczywistości kolejność egzekucji. Znalazłem to w odpowiedzi poniżej z @Airos. – duber
Umieszczenie '?' Po '*' w twoim pierwszym wyrażeniu również sprawi, że ten mecz zadziała, tj. '. *? ([A-Za-z] +)> ([A-Za-z] +) <. *' . Wskażę to tylko dlatego, że może ci pomóc zobaczyć, jak działają, ale odpowiedź @ anubhava jest prawdopodobnie lepsza, w zależności od Twoich konkretnych wymagań. – ajb