/ / Hadoop Pig Łaciński regex match - regex, apache-pig

Hadoop Pig Latin regex match - regex, apache-pig

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 № 1

Są 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).*