import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; //TIP To Run code, press or // click the icon in the gutter. public class Main { public static void main(String[] args) { String p1 = "(?:[0-9a-f]{1,4}:|::){1,15}(?:[0-9a-f]{1,4})?"; String p2 = "(?:[0-9a-f]{1,4})?(?::[0-9a-f]{1,4}|::){1,14}(?:[0-9a-f]{1,4})?"; String pp = "^"+p2+"$"; System.out.println(pp); var p = Pattern.compile(pp); List lists = new ArrayList<>(); lists.add("2600:1500:5aa0:30ce:678f:520a:7875:a690"); lists.add("2600:1500:5aa0:30ce::1"); lists.add("2001:db8::1"); lists.add("fe80::9871:44ae:e337:359a"); lists.add("::1"); for(String str : lists) { var m = p.matcher(str); var found = m.find(); if(found) { System.out.println(str+" -> "+found+" "+m.group(0)); } else { System.out.println(str + " -> " + found); } } } }