我想解析一个IP地址并删除最后一个八位字节,但我不知道在Java的String拆分方法中使用哪个正则表达式。
示例用户输入:10.120.10.3
需要输出:10.120.10
我正在考虑这样的事情,但需要一种方法来在第三个点之后找到并分开:
String[] truncated_IP = user_IP.split("\\.");
truncated_IP[0]
应该包含我要找的内容。
答案 0 :(得分:9)
请勿使用split()
,请使用lastIndexOf()
:
input.substring(0, input.lastIndexOf('.'))
使用您的示例:
String input = "10.120.10.3";
System.out.println(input.substring(0, input.lastIndexOf('.')));
10.120.10
如果您真的想使用split()
,可以使用正则表达式\.(?=[^.]+$)
来完成:
input.split("\\.(?=[^.]+$)")[0]
再次,使用您的示例:
String input = "10.120.10.3";
System.out.println(input.split("\\.(?=[^.]+$)")[0]);
10.120.10
答案 1 :(得分:2)
您可以使用substring
和lastIndexOf
,如下所示:
user_IP.substring(0, user_IP.lastIndexOf('.'))
答案 2 :(得分:1)
你可以写一个正则表达式来从字符串
获取IPAddress public void findMe(){
String regex = "(\\d*[.]){2}\\d";
Matcher matcher = Pattern.compile(regex).matcher("192.168.1.123");
if (matcher.find()){
System.out.print(matcher.group());
}
}
答案 3 :(得分:1)
这是一个应该工作的正则表达式模式。它也返回子类,但第一个元素应始终是C类子网。
var ip = "10.100.243.10";
var classCRegex = "^([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]).";
var subIP = ip.match(classCRegex)[0];
console.log(subIP);
结果:[10.100.243]
答案 4 :(得分:0)
使用拆分 - `代码:
String s = "10.11.12.13";
String sPlit[] =s.split("\\.");
for(int i = 0; i < sPlit.length; i++){
System.out.println(sPlit[i]);
}
输出:
10
11
12
13
` 并返回一个包含除最后一个之外的所有字符串。
答案 5 :(得分:0)
The IPAddress Java library以一种多态的方式同时支持IPv4和IPv6,因此它可以以更通用的方式做到这一点,支持所有可能的IPv4和IPv6字符串格式。免责声明:我是该库的项目经理。
此示例方法将截断最后一个段,即IPv4中的最后一个八位位组:
static void truncateLastSegment(String str) {
IPAddress addr = new IPAddressString(str).getAddress();
IPAddressSection section = addr.getSection(0, addr.getSegmentCount() - 1);
System.out.println("truncated: " + section);
}
在您的示例以及IPv6示例中进行尝试:
truncateLastSegment("10.120.10.3");
truncateLastSegment("2001:db8:0:1234:0:567:8:1");
输出:
truncated: 10.120.10
truncated: 2001:db8:0:1234:0:567:8