我的Minecraft Bukkit服务器有一个简单的IP Regex,可以监听玩家在聊天中说话,如果聊天消息中包含有效的IPv4地址,则会将其替换为我的服务器IP。显然,目的是阻止人们进入并发送垃圾邮件以加入他们的服务器然后离开。现在简单的正则表达式很好用,但人们已经想到了这一点,他们会做的
'Join my server! 127 . 0 . 0 . 1 !!!'
我目前的代码,
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerChat(PlayerChatEvent event) {
String msg = event.getMessage();
String ipRegex = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
String ipfixed = msg.replaceAll(ipRegex, "mc.blockie.net");
event.setMessage(ipfixed);
}
头脑风暴只需几分钟我唯一能想到的就是从聊天字符串中删除所有空间,然后进行我的正则表达式检查,但这不起作用,因为显然每个发送的聊天消息都不会没有任何空间,老实说,就我所尝试的而言。
答案 0 :(得分:1)
尝试使用正则表达式:
"(\\d{1,3}\\s*\\.\\s*){3}\\d{1,3}"
使用\\s*
来匹配可选空格。
答案 1 :(得分:1)
您可以在中间添加一些可选空格:
String ipRegex = "\\d{1,3}(?:\\s*\\.\\s*\\d{1,3}){3}";
在网络方面,我并不精明,但似乎他们可以通过使用像127-0-0-1
这样的东西绕过这一点,对吗?