Java 用正則表達式判斷是否爲IP

  1. 代碼
/** 
 1. @Title:IpAddress.java 
 2. @Package:com.you.dao 
 3. @Description:用正則表達式判斷是否爲IP 
 5. @date: 2014年3月4日 下午10:55:06 
 6. @Version V1.2.3 
 */  
package com.you.dao;  

import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

/** 
 7. @類名:IpAddress 
 8. @描述:用正則表達式判斷是否爲IP 
 9. @Author:Administrator 
 10. @date: 2014年3月4日 下午10:55:06 
 */  
public class IpAddress   
{  
    public static class IpAdd  
    {  
        public boolean isIP(String addr)  
        {  
            if(addr.length() < 7 || addr.length() > 15 || "".equals(addr))  
            {  
                return false;  
            }  
            /** 
             * 判斷IP格式和範圍 
             */  
            String rexp = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";  

            Pattern pat = Pattern.compile(rexp);    

            Matcher mat = pat.matcher(addr);    

            boolean ipAddress = mat.find();  

            return ipAddress;  
        }  
    }  

    /** 
     * @Title : main 
     * @Type : IpAddress 
     * @date : 2014年3月4日 下午10:55:06 
     * @Description : IP可能的範圍是0-255.0-255.0-255.0-255 
     * @param args 
     */  
    public static void main(String[] args)   
    {  
        /** 
         * 符合IP地址的範圍 
         */  
         String oneAddress = "10.127.30.45";  
         /** 
         * 符合IP地址的長度範圍但是不符合格式 
         */  
         String twoAddress = "127.30.45";  
         /** 
         * 不符合IP地址的長度範圍 
         */  
         String threeAddress = "7.0.4";  
         /** 
         * 不符合IP地址的長度範圍但是不符合IP取值範圍 
         */  
         String fourAddress = "255.255.255.2567";  

         IpAdd ipAdd = new IpAdd();  

         //判斷oneAddress是否是IP  
         System.out.println(ipAdd.isIP(oneAddress));  

         //判斷twoAddress是否是IP  
         System.out.println(ipAdd.isIP(twoAddress));  

         //判斷threeAddress是否是IP  
         System.out.println(ipAdd.isIP(threeAddress));  

         //判斷fourAddress是否是IP  
         System.out.println(ipAdd.isIP(fourAddress));  
    }  

} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  1. 運行結果

true 
false 
false 
false

附錄

  1. find()方法是部分匹配,是查找輸入串中與模式匹配的子串,如果該匹配的串有組還可以使用group()函數。
  2. matches()是全部匹配,是將整個輸入串與模式匹配,如果要驗證一個輸入的數據是否爲數字類型或其他類型,一般要用matches()。 
    Pattern pattern= Pattern.compile(“.?,(.)”);

    Matcher matcher = pattern.matcher(result);

    if (matcher.find()) { 
    return matcher.group(1); 
    }

  3. 詳解:

matches 
public static boolean matches(String regex, CharSequence input)

編譯給定正則表達式並嘗試將給定輸入與其匹配。 
調用此便捷方法的形式 
Pattern.matches(regex, input); 
Pattern.compile(regex).matcher(input).matches() ; 
如果要多次使用一種模式,編譯一次後重用此模式比每次都調用此方法效率更高。 
參數: 
regex - 要編譯的表達式 
input - 要匹配的字符序列 
拋出: 
PatternSyntaxException - 如果表達式的語法無效

find 
public boolean find()嘗試查找與該模式匹配的輸入序列的下一個子序列。 
此方法從匹配器區域的開頭開始,如果該方法的前一次調用成功了並且從那時開始匹配器沒有被重置,則從以前匹配操作沒有匹配的第一個字符開始。 
如果匹配成功,則可以通過 start、end 和 group 方法獲取更多信息。

matcher.start() 返回匹配到的子字符串在字符串中的索引位置. 
matcher.end()返回匹配到的子字符串的最後一個字符在字符串中的索引位置. 
matcher.group()返回匹配到的子字符串 
返回: 
當且僅當輸入序列的子序列匹配此匹配器的模式時才返回 true。

4.部分JAVA正則表達式實例

①字符匹配 
Pattern p = Pattern.compile(expression); // 正則表達式 
Matcher m = p.matcher(str); // 操作的字符串 
boolean b = m.matches(); //返回是否匹配的結果 
System.out.println(b);

Pattern p = Pattern.compile(expression); // 正則表達式 
Matcher m = p.matcher(str); // 操作的字符串 
boolean b = m. lookingAt (); //返回是否匹配的結果 
System.out.println(b);

Pattern p = Pattern.compile(expression); // 正則表達式 
Matcher m = p.matcher(str); // 操作的字符串 
boolean b = m..find (); //返回是否匹配的結果 
System.out.println(b);

②分割字符串 
Pattern pattern = Pattern.compile(expression); //正則表達式 
String[] strs = pattern.split(str); //操作字符串 得到返回的字符串數組

③替換字符串 
Pattern p = Pattern.compile(expression); // 正則表達式 
Matcher m = p.matcher(text); // 操作的字符串 
String s = m.replaceAll(str); //替換後的字符串

④查找替換指定字符串 
Pattern p = Pattern.compile(expression); // 正則表達式 
Matcher m = p.matcher(text); // 操作的字符串 
StringBuffer sb = new StringBuffer(); 
int i = 0; 
while (m.find()) { 
m.appendReplacement(sb, str); 
i++; //字符串出現次數 

m.appendTail(sb);//從截取點將後面的字符串接上 
String s = sb.toString(); 
⑤查找輸出字符串 
Pattern p = Pattern.compile(expression); // 正則表達式 
Matcher m = p.matcher(text); // 操作的字符串 
while (m.find()) { 
matcher.start() ; 
matcher.end(); 
matcher.group(1); 
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章