Wyrażenia regularne - niespodziewane zaznaczenie

Wynik zastosowania wyrażenia regularnego jest dla mnie zaskający: dlaczego są zaznaczane wszystkie znaki?

Link do przykładu to https://regex101.com/r/cO8lqs/9344.

A co w ogóle chcesz znaleźć?

Zadaniem jest znalezienie znaczników html co można zrobić przez (<.*?>).

Potrzebuję wiedzieć dlaczego dodanie znaku zapytania (<.*?>)? powoduje, iż zaznaczone są też wszystkie znaki.

A umiesz opisać/wytłumaczyć co robi zewnętrzny kwantyfikator ? w tym wyrażeniu?

Znak zapytania ? oznacza że poprzedzający ciąg będzie zaznaczany zero lub jeden raz.

No właśnie, a co to za znak ma być?

(<.*?>) wyrażanie regularne ma szukać znaku < a następnie jakiegokolwiek znaku . - ma to robić gdy napotka najbliższy znak > i tak działa.

Nie potrafię zrozumieć do daje w wyrażeniu (<.*?>)? znak zapytania na końcu, który powinien działać jak opisałem powyżej a działa zupełnie inaczej.

A ja nie potrafię zrozumieć po co go tam umieszczasz, co chcesz tym osiągnąć?

Znak ? oznacza jedno lub zero wystąpień. Stąd można traktować nawias tak jakby był albo jakby go nie było.

Swoją drogą ta strona źle działa, bo dla pustego ciągu zwraca “no matches” a dla (<.*?>)? że są dopasowania 44 dopasowania. Wygląda tak, że na sztywno zakłada pusty ciąg Regex to no matches, ta strona wygląda, że dziala lepiej: https://regexr.com/4bvet

PS Lektura na dziś: https://pl.wikipedia.org/wiki/Wyrażenie_regularne

@kostek135 - dzięki za wyjaśnienie and @Fizyda za dyskusję :slight_smile: .

Ja dyskusją starałem się nakierować Cię na to co dał Ci na tacy kostek :wink:.

@Fizyda - widocznie łatwiej rozumiem łapatologię :wink: Dzięki :slight_smile:

Swoją drogą lepszą wersją wyrażenia może się okazać: (<.+?>) bo nie będzie zaznaczał pustych nawiasów - <>, plus warto jeszcze upewnić się, że pomiędzy ostrymi nawiasami nie ma spacji :wink:.