我需要找到一个字符串(在Java中)是否包含IPv4地址(它可以存在于任何地方)。 我使用了以下行,但它失败了:
if (token.matches(".[0-9]{1,3}/..[0-9]{1,3}/..[0-9]{1,3}/..[0-9]{1,3}") == true)
这里可能有什么不妥。
答案 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;
}