我有以下Pig Latin过滤器:
filtered = FILTER raw BY year >= 1960 AND string MATCHES '(?!.*[0-9].*|.{1}|.*@.*|.*www.*|.*http.*)';
我打算为以下字符串获取以下结果:
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
相反,我得到一个空的结果集。
编辑: 我已将正则表达式更新为:
'^(?!.*[0-9].*|.{1}|.*@.*|.*www.*|.*http.*)$'
在m.buettner的修正之后,但继续得到一个空的结果集。
答案 0 :(得分:1)
有两个问题。首先,看起来Pig Latin要求你匹配完整的字符串而不是“只是在字符串中的某个匹配”。但是你的负向前瞻不会消耗任何字符,因此它与字符串的完全匹配。这可以通过附加.*
来解决。其次,您的规则.{1}
(其中{1}
是多余的)不要求这一个字符是字符串中唯一的字符。所以在你的上一个例子中,它只会消耗r
的{{1}}并引发否定前瞻。
因此,这是解决方案:
red