我在正则表达式后面有一个负数问题。我已经阅读了stackoverflow的结果,恐怕我不太了解它们。
我操作游戏服务器,并且有一个工具可以读取用户的聊天记录,并在用户使用被禁止的单词时将其踢出。该工具使用PERL正则表达式引擎。
假设我的禁语是“bag”或“digger”的流行词。我可以使用以下正则表达式来匹配包含这些单词的聊天行。
(?i)(digg|bag)(?-i)
我的实际清单中还有其他字词。但是,我想首先提供一个警告,该警告在聊天室中显示为:
Owner:不要说“digger”
因此,我尝试使用负向后视来避免在以“所有者:”开头的情况下匹配禁止词列表-但是,如果我指定在“:”和禁止词之间使用的确切文字,则我只能使其正常工作字-我并不总是这样做,经常不小心与自己相符。
我尝试使用:
(?<!Owner\:)/s*(?i)(digg|bag)(?-i)
如果只有空格,则可以使用,但是我真正想要的是不匹配:所有者:挖掘机
庄主:挖掘机
店主:不要用袋子作为侮辱
店主:(这里还有其他东西)挖
等,但匹配:
(其他):(任何禁止的词,无论冒号之后是什么)
由于零宽度的断言(我无法解决问题),或者我的正则表达式很弱,因此我无法确定是否需要这种语法。
我已经尝试了一些教程,并使用了regex101解析器,但是我无法完全得到想要的东西。请你帮忙
最佳答案
好像您只想要:
/^(?!Owner:).*(?i:(digg|bag))/s
匹配的消息不以Owner:开头,并且包含(不区分大小写)digg或bag。