用于在Java中匹配ipv4地址的模式

时间:2013-06-05 17:08:49

标签: java pattern-matching

我需要找到一个字符串(在Java中)是否包含IPv4地址(它可以存在于任何地方)。 我使用了以下行,但它失败了:

if (token.matches(".[0-9]{1,3}/..[0-9]{1,3}/..[0-9]{1,3}/..[0-9]{1,3}") == true) 

这里可能有什么不妥。

2 个答案:

答案 0 :(得分:0)

斜线的方向是错误的。这不是文件系统路径,您可以安全地使用正斜杠而不是反斜杠。这是正则表达式,因此您必须使用实际反斜杠\并复制它,因为您正在编写Java代码:\\

所以,这是表达式:

token.matches("(?:\\d\\.){1,3}\\d{1,3}")

答案 1 :(得分:0)

可以使用纯正则表达式,但有一些工具可以检查IP地址的有效性。

假设字符串是由空格分隔的标记列表,您可以这样做:

// Crude check
private static final Pattern PATTERN = Pattern.compile("\\d+(\.\\d+){3}");

public boolean containsIPAddress(final String input) 
{
    for (final String candidate: input.split("\\s+")) {
        if (!PATTERN.matcher(candidate).matches())
            continue;
        try {
            InetAddress.getByName(candidate);
            return true;
        } catch (UnknownHostException ignored) {
        }
    }

    return false;
}

使用番石榴,它更容易:

private static final Splitter SPLITTER = Splitter.on(' ');

public boolean containsIPAddress(final String input) 
{
    for (final String candidate: SPLITTER.split(input)) {
        if (InetAddresses.isInetAddress(candidate))
            return true;

    return false;
}