Extraer direcciones IP de cadenas usando expresiones regulares

En una aplicación, obtengo cadenas que contienen direcciones IP, pero estas cadenas no tienen un formato preciso. Todo lo que sabemos es que estas cadenas pueden contener una dirección IP.

aquí hay un ejemplo de cómo se ve la cadena:

  • “XPSPort”
  • “IP_10.29.167.187”
  • “10.29.166.193”

Me gustaría obtener un código Java que extraiga la dirección IP de la cadena si hay una o que devuelve “” si la cadena no contiene una dirección IP.

Intenté este código pero no funciona:

String IPADDRESS_PATTERN = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; Pattern pattern = Pattern.compile(IPADDRESS_PATTERN); Matcher matcher = pattern.matcher(ipString); if (matcher.find()) { return matcher.group(); } else{ return "0.0.0.0"; } 

Estoy bastante seguro de que usar RegExp es la mejor manera de lograrlo, pero no soy muy bueno con esto, ¿alguien puede ayudarme a encontrar el buen RegExp?

Gracias por adelantado.

El enlace de Richard me ayudó a encontrar la respuesta. aquí está el código de trabajo:

 String IPADDRESS_PATTERN = "(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"; Pattern pattern = Pattern.compile(IPADDRESS_PATTERN); Matcher matcher = pattern.matcher(ipString); if (matcher.find()) { return matcher.group(); } else{ return "0.0.0.0"; } 

IPV4_PATTERN = "^(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}$"

Verifique esta solución para validar las direcciones IPV4 e IPV6 .

 /** * This class provides a variety of basic utility methods that are not * dependent on any other classes within the org.jamwiki package structure. */ public class Utilities { private static Pattern VALID_IPV4_PATTERN = null; private static Pattern VALID_IPV6_PATTERN = null; private static final String ipv4Pattern = "(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])"; private static final String ipv6Pattern = "([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}"; static { try { VALID_IPV4_PATTERN = Pattern.compile(ipv4Pattern, Pattern.CASE_INSENSITIVE); VALID_IPV6_PATTERN = Pattern.compile(ipv6Pattern, Pattern.CASE_INSENSITIVE); } catch (PatternSyntaxException e) { //logger.severe("Unable to compile pattern", e); } } /** * Determine if the given string is a valid IPv4 or IPv6 address. This method * uses pattern matching to see if the given string could be a valid IP address. * * @param ipAddress A string that is to be examined to verify whether or not * it could be a valid IP address. * @return true if the string is a value that is a valid IP address, * false otherwise. */ public static boolean isIpAddress(String ipAddress) { Matcher m1 = Utilities.VALID_IPV4_PATTERN.matcher(ipAddress); if (m1.matches()) { return true; } Matcher m2 = Utilities.VALID_IPV6_PATTERN.matcher(ipAddress); return m2.matches(); } } 

fuente: determine si la cadena dada es una dirección IPv4 o IPv6 válida.

Patrón de expresión regular de dirección IP:

 ^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\. ([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$ 

Para referencia con ejemplos haga clic aquí