我如何检查包含IP地址的字符串? 例 “Hello guys”返回false “你好,这里是我的ip 22.27.0.0”返回true
谢谢!
答案 0 :(得分:3)
掌握正则表达式(第三版)提供了一种模式,用于验证IPv4地址,在0-255范围内有四个以点分隔的整数:
^(?:[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])$
修改它以查找(而不是验证)IP,排除看起来像在较长的点数字符串中出现的IP的内容,以及Java字符串语法的转义反斜杠,我们可以在Java方法中将其呈现为:< / p>
public static String extractIP(String s) {
java.util.regex.Matcher m = java.util.regex.Pattern.compile(
"(?<!\\d|\\d\\.)" +
"(?:[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])" +
"(?!\\d|\\.\\d)").matcher(s);
return m.find() ? m.group() : null;
}
如果在字符串中找到IP,则返回IP,否则返回null
。
要检查是否包含 IP,请执行if (extractIP(str) != null) ...
。
答案 1 :(得分:1)
不使用正则表达式,您需要两件事
这两种方法都非常简单。检查字符串中的每个部分是否与每个部分相对应。
检查字符串是否为IP
如果字符串是IP,则由4对数字组成,范围为0 - 255.
public class IpChecker {
public static boolean isIp(String ip) {
// Check if the string is not null
if (ip == null)
return false;
// Get the parts of the ip
String[] parts = ip.split(".");
if (parts.length != 4)
return false;
for (String s : parts) {
try {
int value = Integer.parseInt(s);
// out of range
if (value <= 0 || value >= 255) {
return false;
}
} catch (Exception e) {
return false;
}
}
return true;
}
}
检查字符串何时包含IP 检查字符串中的每个单词。
public class IpDetector {
// Detects an Ip given a phrace
public static String detect(String ip) {
// Check if the string is not null
if (ip == null)
return null;
// Get the parts of the ip
String[] parts = ip.split(" ");
for (String part : parts) {
if (IpParser.isIp(part)) {
return part;
}
}
return null;
}
}
这是一个非常简单的想法,你可以改进它。