String REGEX = "((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))";在字符串“http://192.168.1.461:3421/test.do?url=test”,“demo exist 127.0.5.35.”,“test12.34.22.11.56.47data”   这些场景下如何提取出正确的IP?Pattern pat = Pattern.compile(REGEX);
Matcher mt = pat.matcher(字符串);
while (mt.find()) {
System.out.println("" + mt.group());
}
192.128.1.461被匹配出192.168.1.46  ⊙﹏⊙b汗死姐勒!求贪婪型能搞定上述场景的正则表达式或解决方案,万分感谢  

解决方案 »

  1.   

    在字符串“http://192.168.1.461:3421/test.do?url=test”,“demo exist 127.0.5.35.”,“test12.34.22.11.56.47data”   这些场景下如何提取出正确的IP?想要的结果以及为什么?
    比如说:
    http://192.168.1.461:3421/test.do?url=test字符串
    192.168.1.461是错误ip。不应该匹配。
    demo exist 127.0.5.35.”
    也是错误的吗?35后面有个点。
    test12.34.22.11.56.47data
    12.34.22.11.56.47也是错误的吗?能说明白点嘛?弄的一知半解。
    写不写的出来是一回事,对吧。
      

  2.   

    额(⊙o⊙)…,  。
    这三种场景都是错误的。 原本是不应该匹配出来的,现在用REGEX都匹配出来了
    http://192.168.1.461:3421/test.do?url=test字符串
    192.168.1.461是错误ip。           匹配出192.168.1.46
    demo exist 127.0.5.35.”
    也归为错误的。                      匹配出127.0.5.35
    test12.34.22.11.56.47data
    12.34.22.11.56.47也是错误的。     匹配出12.34.22.11想求一个正则表达式能既截取又校验的,,,
    或者说在现有的REGEX上面加一点,判断后面非指定字符
      

  3.   

    正则抓取只是最大可能找到可以匹配的内容,并不直接判定是否合法。
    按照楼主你这个要求,要考虑先把你认为合理的 IP 信息抓出来,然后在判断是否为合法IP。也即先按照"[1-9.]+"来抓取每个你认为完整的IP信息,
    然后再用 matches("XXXOOO") 来判断其是否合法。
      

  4.   


    String regex = "(?<![\\d+\\.])((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))(?![\\d\\.])";
    String s = "http://192.168.1.461:3421/test.do?url=tes," +
    "demo exist127.0.5.35.," +
    "demo exist1127.0.5.35.," +
    "demo exist.127.1.5.35.," +
    "demo exist192.168.1.1lkjh," +//正确的
    "test12.34.22.11.56.47data" ;
    // 这些场景下如何提取出正确的IP?
      

  5.   


    public static void main(String[] args) throws Exception {
    // http://www.mkyong.com/regular-expressions/how-to-validate-ip-address-with-regular-expression/
    String regex = "([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])";
    String input = "http://192.168.1.461:3421/test.do?url=test字符串 demo exist 127.0.5.35. test12.34.22.11.56.47data";
    Matcher matcher = Pattern.compile(regex).matcher(input);
    while (matcher.find()) {
    System.out.println(matcher.group());
    }
    }
    192.168.1.46
    127.0.5.35
    12.34.22.11