Dzisiaj natknąłem się na następujący wyrażenia regularnego i chciał wiedzieć, co Ruby zrobi z nim:sens `+` następstwie `*`, gdy ten ostatni jest stosowany jako kwantyfikator w wyrażeniu regularnym
> "#a" =~ /^[\W].*+$/
=> 0
> "1a" =~ /^[\W].*+$/
=> nil
W tym przypadku Ruby wydaje się ignorować znak +
. Jeśli to nie jest poprawne, nie jestem pewien, co z tym robi. Zgaduję, że nie jest interpretowany jako kwantyfikator, ponieważ *
nie jest escaped i jest używany jako kwantyfikator. W wyrażeń regularnych w języku Perl/Ruby, czasami gdy znak (np. -
) jest używany w kontekście, w którym nie można go interpretować jako znaku specjalnego, jest traktowany jako literał. Ale jeśli tak się dzieje w tym przypadku, spodziewam się, że pierwszy mecz się nie powiedzie, ponieważ w ciągu lwartości nie ma wartości +
.
Czy to jest subtelnie poprawne użycie znaku +
? Czy powyższe zachowanie jest błędem? Czy brakuje mi czegoś oczywistego?
Skąd się wziął ten regex? –
W niektórych materiałach bezpieczeństwa stron trzecich napotkanych w trakcie mojej pracy. Zgaduję, że regex nie jest zgodny z zamierzeniami autora, ale kiedy zobaczyłem zachowanie Ruby, zacząłem mieć pytania dotyczące tego założenia. –