Mam następujący filtr łaciński:
filtered = FILTER raw BY year >= 1960 AND string MATCHES "(?!.*[0-9].*|.{1}|.*@.*|.*www.*|.*http.*)";
Zamierzałem uzyskać następujące wyniki dla następujących ciągów:
a #false .{1}
email@example.com #false .*@.*
http://somesite.com #false .*http.*
www.somesite.com #false .*www.*
12word #false .*[0-9].*
wo12rd #false .*[0-9].*
word12 #false .*[0-9].*
red #true
Zamiast tego otrzymuję pusty zestaw wyników.
EDYTOWAĆ: Zaktualizowałem wyrażenie regularne do:
"^(?!.*[0-9].*|.{1}|.*@.*|.*www.*|.*http.*)$"
po poprawce m.buettnera, ale nadal otrzymuj pusty zestaw wyników.
Odpowiedzi:
1 dla odpowiedzi № 1Są dwa problemy. Po pierwsze, wygląda na to, że Pig Latin wymaga dopasowania pełnego ciągu znaków zamiast "tylko dopasować gdzieś w ciągu znaków". Ale ujemny przodek nie pochłania żadnych znaków, więc nie pasuje do całego ciągu znaków. Można to po prostu rozwiązać przez dołączenie .*
. Po drugie twoja reguła .{1}
(gdzie {1}
jest zbędny) nie wymaga, aby ten jeden znak był jedyną postacią w ciągu znaków. Więc w twoim ostatnim przykładzie po prostu zużyjesz r
z red
i przestaw negatywną uprzedzkę.
Oto rozwiązanie:
(?!.*[0-9]|.$|.*@|.*www|.*http).*