我操作一个游戏服务器,我有一个工具,可以读取用户的聊天,并在用户使用禁止的单词时踢他们.该工具使用PERL正则表达式引擎.
说我的被禁词是“包”或“挖掘者”的流行衍生词.我可以使用以下正则表达式来匹配包含这些单词的聊天行.
(?i)(digg|bag)(?-i)
我的实际列表中还有其他单词.
但是,我想首先提出警告,在聊天中显示为:
Owner: Don’t say “digger”
所以我尝试使用负面的lookbehind来避免匹配我的禁止词列表,当它前面是“所有者:” – 但是,如果我指定我在“:”和被禁止之间使用的确切文本,我只能让它工作这个词 – 我并不总是这样做,而且经常意外地与我的自我相匹配.
我试过用:
(?<!Owner\:)/s*(?i)(digg|bag)(?-i)
如果只有空格,它可以工作,但我真正想要的是不匹配:
Owner:digger
Owner: Digger
Owner: don’t use bag as an insult
Owner:(anything else here)dig
等等,但匹配:
(anything else):(any banned word regardless of what precedes it after the colon)
如果我想要的东西在这种语法中是可能的,我无法解决,因为零宽度断言(我无法解决这个问题),或者我的正则表达式只是弱点.
我已经尝试了几个教程,并使用了regex101解析器,但我无法得到我想要的东西.你能帮忙吗?
解决方法
/^(?!Owner:).*(?i:(digg|bag))/s
匹配不以Owner:开头的消息,并包含(不区分大小写)digg或bag.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。