我正在做一个亵渎过滤器(我知道的坏主意),我试图用Java中的正则表达式。正则表达式的问题 - 亵渎过滤器
现在这里是我的正则表达式示例字符串,它将过滤2个单词,foo和bar。
(?i)f(?>[.,;:*`'^+~\\/#|]*+|.)o(?>[.,;:*`'^+~\\/#|]*+|.)o|b(?>[.,;:*`'^+~\\/#|]*+|.)a(?>[.,;:*`'^+~\\/#|]*+|.)r
基本上,我把它忽略的话,那么我在骂人单词的每个字母,并|
每个完整的诅咒字正则表达式之间放(?>[.,;:*'^+~\\/#|]*+|.)
。
它的工作,但它很慢。
如果我在过滤器中有6个单词,它将在939,548纳秒内过滤一个相当长的字符串(500个字符)。当我有12个时,它只是双打。
所以,每6个诅咒词约1ms用这个。但我的过滤器将有数百(400左右)。 计算这个值需要大约66ms来过滤这个长字符串。
这是我正在构建的聊天服务器,如果我有大量的用户(比如说5,000),并且有五分之一的人在1秒内聊天(1,000条聊天消息),我需要过滤一条消息1毫秒。
我是否要求太多的正则表达式?手工制作我自己专用的过滤器会更快吗?有没有方法来优化这个?
我正在预编译正则表达式。
如果你想看到这个表达式http://regexr.com?30454
更新的效果:另一件事我所能,是在动作过滤客户端的聊天信息。
更新:我认为实现这种程度的表现会不使用正则表达式黯然手工编码解决方案的唯一途径,所以我必须做一个更基本的过滤器。
谜底。亵渎过滤器如何区分良性“关联”和亵渎“asshat” – 2012-02-23 22:53:34
http://en.wikipedia.org/wiki/Scunthorpe_problem;) – 2012-02-23 23:01:32
@Peter你只用了几秒就打败了我;-) – DNA 2012-02-23 23:02:54