2

我有我们的防火墙用来阻止成人网站的关键字“cum”,问题是这有点太好用了,因为这也阻止了任何带有单词“document”的 URL

防火墙将采用正则表达式字符串,我尝试了这个:

^.*(?!document)cum.*$

Vut 它仍然匹配“文档”。我有一种感觉,我应该使用管道|,但我不明白。

我想要的是匹配任何地方

*cum*

在 URL(或域名)中找到,但如果单词是documentor ,则不是documents

可能的?据我了解,单词边界在这里不起作用,因为该单词cum在 URL 中时不一定会被空格分隔,如果它在域名中则绝对不会。

这是另一种说法:

Allow "examplesearchdocuments.com"
Allow "examplemydocuments.com"
Allow "documentexample.com"
Allow "example.com/somedocuments"
Don't allow "funnycumsiteexample.com"
Don't allow "cumallovereverythingexample.com"
Don't allow "exampleseemycum.com"

哪里cum是坏词匹配。抱歉,如果这些示例中的任何一个是真实站点,我不知道如何传达这一点。

4

2 回答 2

2

根据评论,我错了。

如果您在前瞻中使用后向搜索,则只有当它不在“文档”一词中时,您才能匹配“cum”。

cum(?!(?<=docum)ent)

这是一些关于环视的阅读http://www.regular-expressions.info/lookaround.html

这是针对大量测试的。

http://www.rubular.com/r/b5iZrn6Cjz

于 2012-08-28T16:14:24.137 回答
0

我的第一个建议也是\bcum\b像其他人一样使用,但这不匹配,例如卡明。

(?!)否定环视语法几乎是正确的:

^.*(?<!do)cum(?!ent).*$

或者

^.*(?<!do)cum(?!ents?).*$

支持复数。您可以在http://fiddle.re/3pyj通过单击 Java 来查看您提供的示例。

我的建议是^.*\bcum.*$匹配单词边界,即单词开头和“cum”以及之后的任何内容。

于 2012-08-28T16:14:37.753 回答