/ / Hadoop Pig match de regex latin - regex, apache-cochon

Hadoop Pig match de regex latin - regex, apache-cochon

J'ai le filtre Pig Latin suivant:

filtered = FILTER raw BY year >= 1960 AND string MATCHES "(?!.*[0-9].*|.{1}|.*@.*|.*www.*|.*http.*)";

J'avais l'intention d'obtenir les résultats suivants pour les chaînes suivantes:

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

Au lieu de cela, je reçois un résultat vide.

MODIFIER: J'ai "mis à jour la regex pour:

"^(?!.*[0-9].*|.{1}|.*@.*|.*www.*|.*http.*)$"

après correction de m.buettner, mais continue d’obtenir un résultat vide.

Réponses:

1 pour la réponse № 1

Il y a deux problèmes. Premièrement, il semble que Pig Latin vous oblige à faire correspondre la chaîne complète au lieu de "juste une correspondance quelque part dans la chaîne". Mais votre regard négatif ne consomme aucun caractère, il ne correspond donc pas à la totalité de la chaîne. Cela pourrait simplement être résolu en ajoutant .*. Deuxièmement votre règle .{1} (où {1} redondant) ne nécessite pas que ce caractère soit le seul caractère de la chaîne. Donc, dans votre dernier exemple, il va simplement consommer le r de red et déclencher l'anticipation négative.

Voici donc la solution:

(?!.*[0-9]|.$|.*@|.*www|.*http).*