Ne pas faire IP avec regex. Vous aurez presque toujours tort. Même lorsque vous avez la possibilité de faire les choses correctement, c'est dans des cas de petite taille que l'ensemble de l'exercice est inutile.
Par exemple, quelle est la regex à masquer 192.168.128.0/15? Rappelez-vous qu'avec ce modèle, 192.168.120.35 et 192.168.129.35 sont dans différents réseaux.
Il y a pire avec/14,/13,/12, etc.
Les gars OpenNMS ont fait quelque chose de semblable à ce que vous faites quelque temps, mais ils ont mis leur « matcher réseau » comme Fonction PostgreSQL. Il a dû être réécrit plusieurs fois pour l'enlever de ses racines regex et dans le monde moderne. Cela a causé plus de problèmes que cela n'a été corrigé.
Étant donné que Java est déjà disponible, utilisez les classes de mise en réseau Java. Ils sont beaucoup plus robustes que n'importe quelle solution regex que vous pourriez bricoler ensemble. Par exemple, vous pouvez voir comment déterminer si deux adresses se trouvent sur le même réseau.
public static boolean sameNetwork(InetAddress ip1, InetAddress ip2, String mask)
throws Exception {
byte[] a1 = ip1.getAddress();
byte[] a2 = ip2.getAddress();
byte[] m = InetAddress.getByName(mask).getAddress();
for (int i = 0; i < a1.length; i++)
if ((a1[i] & m[i]) != (a2[i] & m[i]))
return false;
return true;
}
(crédit à Óscar López) pour cet extrait
Toute tentative de faire la même chose avec regex va être beaucoup plus grande et beaucoup moins susceptibles d'être correct.
L'entrée ... me semble bizarre. Qu'est-ce que c'est vraiment essayer de dénoter? – Makoto
L'entrée consiste en une chaîne avec des adresses IP. J'ai besoin d'analyser la chaîne d'entrée et besoin de masquer l'adresse IP spécifique avec un certain caractère. – user3809619
Votre question n'est pas claire. Je ne sais pas ce que vous définissez comme "masque" et quelle est votre entrée/sortie attendue – gerrytan