Jak powiedzieć wyrażeniu RegEx (wersja .NET), aby uzyskać najmniejsze prawidłowe dopasowanie zamiast największego?
.net
regex
regex-greedy
non-greedy
Jonathan Allen
źródło
źródło
abcabk
anda.+?k
, RegEx dopasuje cały ciąg.Operator nie chciwy
?
. Tak jak to:źródło
Operator niechciwy nie oznacza najkrótszego możliwego dopasowania:
a.+?k
dopasuje cały ciąg (w tym przykładzie) zamiast tylko trzech ostatnich znaków.Zamiast tego chciałbym znaleźć najmniejsze możliwe dopasowanie.
To jest ostatnie możliwe dopasowanie dla „
a
”, aby nadal zezwalać na wszystkie dopasowaniak
.Myślę, że jedynym sposobem na to jest użycie wyrażenia takiego jak:
Pokaż fragment kodu
źródło
cab
. Jeśli moje dane wejściowe tocaaacab
i wyszukama.*?b
je, zwróci pełny ciąg zamiast krótkiego dopasowania wewnątrz. Jak szukać wstecz odb
?START[^START]*?END
(gdzie START i END to początkowe i końcowe wyrażenia regularne znaków). Zasadniczo oznacza to „dopasuj wszystko od START do END, gdzie postacie pośrednie nie obejmują START ponownie”