import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author: Max
* @Description: IPjug
* @date: 2021-05-21 下午 4:37
**/
public class IPUtils {
/**
* 标准IPv4地址的正则表达式:可以在字符串中提取IPv4地址
*/
private static final Pattern IPV4_REGEX_NORMAL = Pattern.compile(
"((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");
/**
* 全格式IPv6正则表达式:可以在字符串中提取IPv6地址
*/
private static final Pattern IPV6_REGEX_NORMAL = Pattern.compile(
"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?");
/**
* 判断是否为IPv4地址
*/
public static boolean isIPv4(String ip){
return IPV4_REGEX_NORMAL.matcher(ip).matches();
}
/**
* 判断是否为IPv6地址
*/
public static boolean isIPv6(String ip){
return IPV6_REGEX_NORMAL.matcher(ip).matches();
}
/**
* 正则提前字符串中的IP地址
* @param ipString
* @return
*/
public static List<String> getIps(String ipString){
List<String> ips = new ArrayList<String>();
Matcher v4m = IPV4_REGEX_NORMAL.matcher(ipString);
Matcher v6m = IPV6_REGEX_NORMAL.matcher(ipString);
while (v4m.find()) {
String ipv4 = v4m.group();
ips.add(ipv4);
}
while (v6m.find()){
String ipv6 = v6m.group();
ips.add(ipv6);
}
return ips;
}
public static void main(String[] args) {
String ipString="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROT0cOL=TCP)(HOST= 10.15.96.14)(PORT=1521))(ADDRESS=(PROTOcOL=TCP)(HOST=10.15.96.15)(PORT=1521))(LoAD_BALANCE=no)(FAILOVER=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=RWA)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=10)(DELAY=10))))";
List<String> ips = getIps(ipString);
System.out.println(ips.toString());
boolean iPv4 = isIPv4(ips.get(0));
boolean iPv6 = isIPv6(ips.get(1));
System.out.println(iPv4);
System.out.println(iPv6);
}
}