Java Regex:如何从字符串中提取除最后一部分之外的IP地址?

时间:2015-05-03 20:29:35

标签: java regex

我正在试验websockets,我想让它从LAN上的另一台计算机自动连接到本地网络,因为同一网络上有255台可能的计算机,我希望它能够全部试用然后连接到它可以连接到的第一个。但是,IP地址的第一部分 192.168.1。* 根据路由器设置而有所不同。

我可以获得机器的整个当前IP地址,然后我想提取前部。

例如

25.0.0.5 will become 25.0.0.
192.168.0.156 will become 192.168.0.
192.168.1.5 will become 192.168.1.

等等

 String Ip  = "123.345.67.1";
 //what do I do here to get IP == "123.345.67."

4 个答案:

答案 0 :(得分:3)

您可以使用正则表达式:

String Ip  = "123.345.67.1";
String IpWithNoFinalPart  = Ip.replaceAll("(.*\\.)\\d+$", "$1");
System.out.println(IpWithNoFinalPart);

快速正则表达式解释:(.*\\.)是一个捕获组,其中包含截至上一个.的所有字符(由于与*量词的贪婪匹配),\\d+匹配1位或几位数,$是字符串的结尾。

这是sample program on TutorialsPoint

答案 1 :(得分:1)

String Ip  = "123.345.67.1";
String newIp = Ip.replaceAll("\\.\\d+$", "");
System.out.println(newIp);

输出:

123.345.67

说明:

\.\d+$

Match the character “.” literally «\.»
Match a single character that is a “digit” «\d+»
   Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
Assert position at the end of the string, or before the line break at the end of the string, if any «$»

演示:

http://ideone.com/OZs6FY

答案 2 :(得分:0)

您可以使用String.lastIndexOf('.')来查找最后一个点而不是正则表达式,而String.substring(...)可以使用String ip = "192.168.1.5"; System.out.println(ip.substring(0, ip.lastIndexOf('.') + 1)); // prints 192.168.1. 来提取第一部分,如下所示:

session_start();
if(isset($_GET['token'], $_GET['PayerID'])) {
     $_SESSION['token'] = $_GET['token'];
     $_SESSION['PayerID'] = $_GET['PayerID'];
     header("Location: /page.php");
     exit;
} 

答案 3 :(得分:-1)

将字符串拆分为“。”如果字符串是一个有效的IP地址字符串,那么你应该有一个包含4个部分的String []数组,然后你可以只用一个点“。”加入前三个。并有“前部”



    String IPAddress = "127.0.0.1";
    String[] parts = IPAddress.split(".");

    StringBuffer frontPart = new StringBuffer();
    frontPart.append(parts[0]).append(".")
             .append(parts[1]).append(".")
             .append(parts[2]).append(".");