1

我有以下 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 的修正之后,却继续得到一个空的结果集。

4

1 回答 1

1

有两个问题。首先,Pig Latin 似乎要求您匹配完整的字符串,而不是“只是字符串中某处的匹配”。但是您的否定前瞻不会消耗任何字符,因此它与完整的字符串不匹配。这可以简单地通过附加来解决.*。其次,您的规则.{1}(哪里{1}是多余的)不需要这个字符是字符串中的唯一字符。因此,在您的最后一个示例中,它将简单地消耗rofred并引发负前瞻。

因此,这是解决方案:

(?!.*[0-9]|.$|.*@|.*www|.*http).*
于 2012-10-27T18:13:43.357 回答