我有防火墙用来阻止成人网站的关键字“暨”,问题是这样做有点太好了,因为这也会阻止任何带有“文档”字样的网址
防火墙将采用正则表达式字符串,我尝试了这个:
^.*(?!document)cum.*$
但它仍然匹配“文档”。我有一种感觉,我应该使用烟斗|
,但我不明白。
我想要的是匹配任何地方
*cum*
位于网址(或域名)中,但如果该字词为document
或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
是坏词匹配。很抱歉,如果这些示例中的任何一个是真实网站,我不知道如何传达这一点。
答案 0 :(得分:1)
根据评论,我错了。
如果你在前瞻中使用了一个lookbehind,只有当它不在单词“document”中时才能匹配“cum”。
cum(?!(?<=docum)ent)
以下是关于环视http://www.regular-expressions.info/lookaround.html
的一些阅读这是针对大量测试的。
答案 1 :(得分:0)
我的第一个建议也是使用\bcum\b
作为其他建议,但这与卡明。
使用负面外观(?!)
语法几乎正确:
<
>
^.*(?<!do)cum(?!ent).*$
或
^.*(?<!do)cum(?!ents?).*$
支持复数。 您可以通过单击Java查看您提供的示例来查看:http://fiddle.re/3pyj。
我的建议是^.*\bcum.*$
匹配单词边界,即单词start和'cum'以及之后的任何内容。