1

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

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

这里有什么问题。

4

2 回答 2

1

为此使用纯正则表达式是可能的,但已经有工具可以检查 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;
}
于 2013-06-05T17:21:19.810 回答
0

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

所以,这里是表达式:

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

于 2013-06-05T17:19:51.913 回答