我在使用负后向正则表达式时遇到问题。我已经阅读了 stackoverflow 结果,恐怕我不太了解它们。
我经营着一个游戏服务器,我有一个工具可以读取用户的聊天记录,如果用户使用了禁用词,就会踢出用户。该工具使用 PERL 正则表达式引擎。
假设我的禁用词是“bag”或“digger”的流行派生词。我可以使用以下正则表达式来匹配包含这些单词的聊天行。
(?i)(digg|bag)(?-i)
我的实际列表中还有其他词。
但是,我想先提供一个警告,它在聊天中显示为:
车主:不要说“挖掘机”
因此,我尝试使用否定的后视来避免匹配我的禁用词列表,因为它前面有“所有者:” - 但是,如果我指定我在“:”和被禁止的文本之间使用的确切文本,我只能让它工作单词 - 我并不总是这样做,并且经常不小心匹配我自己。
我试过使用:
(?<!Owner\:)/s*(?i)(digg|bag)(?-i)
如果只有空格,这有效,但我真正想要的是不匹配:
所有者:挖掘机
拥有者:挖掘机
店主:别拿包来侮辱
业主:(这里还有什么)挖掘
等等,但匹配:
(其他):(任何被禁止的词,不管冒号后面的内容)
由于零宽度断言(我无法绕开我的脑袋),或者我的 regex-fu 很弱,我无法确定在这种语法中我想要的东西是否可能。
我已经尝试了几个教程,并使用了 regex101 解析器,但我不能完全得到我想要的。请问你能帮忙吗?