JAVA常用類之——正測表達式

JAVA常用類之——正則表達式

    首先,正測表達式是按一定的規則來處理字符串的,具體就包括判斷,獲取,分割,替換功能。
    通常,它被用於下面兩個目的:
    1. 匹配一串字符串是符符合特定的規則,比如郵箱格式,用戶名和密碼的格式。
    2. 從字符串中獲取我們想要的部分。

    一. 判斷功能,採用String類的maches(String regex)方法實現。
    示例1. 簡單的字符串匹配模式:
<span style="font-size:14px;">//中國移動136和139開頭的電話號碼匹配模式
		String regex = "13[69]\\d{8}";</span>
    其中\\d表示任意數字,後面{ }內的內容表示前面數字出現的頻度。
    
    示例2. 校驗郵箱格式是否符合要求
    1. 郵箱格式匹配的正則表達式如下:    
String emailRegex = "[a-zA-Z_0-9]@[a-zA-Z_0-9]\\.(com|cn|org|net|gov)";
     上面的正則表達式只能是[email protected]類型的,因爲[a-zA-Z_09]只能表示一個數字,可以在後面加個“+”就可以表示多個字符了。    
String emailRegex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]+\\.(com|cn|org|net|gov)";
    對上面的表達式進行優化,可以如下表示:    
String emailRegex1 = "\\w+@\\w+\\.(com|cn|org|net|gov)";
    從上面可以看出,正則表達式中的特殊字符'+'的作用是:指定前面表達式可以出現多次,否則只能出現一次。
    用戶名不可以無限長,所以還可以用{ }來限制用戶名長度,比如最少6位,最多12位,@符號後面跟的公司名最少2位,最多6位,這樣的規則如下:    
String emailRegex1 = "\\w{6,12}@\\w{2,4}\\.(com|cn|org|net|gov)";
    繼續優化,在很多網站註冊時發現,用戶名只能以字母開頭,所以上面的規則改爲下:    
String emailRegex1 = "[a-zA-Z]\\w{6,12}@\\w{2,4}\\.(com|cn|org|net|gov)";
    上面限定了第一個字母必須是a-z或A-Z。

    二. 分割,獲取,替換功能,採用String類的方法實現
    先思考下面幾個問題:
    1. 在QQ聊天過程中,如果你發送銀行卡號,客碼之類的,QQ都會給出提示什麼的,怎麼做到? 
    2. 在網站或論壇註冊的過程時候,提示你用戶名少於X位數,用戶名不能以數字開頭,這是怎麼做到的?
    3. 在發表博客或貼子過程中,如果出現髒話或不文明之類的話,會屏蔽掉,這是怎麼做到的?
    請看下面的例子。
    1. 識別銀行卡號:    
// 銀行卡號的簡單匹配規則,提示"請不要在聊天中發送銀行卡號信息"
		// 銀行卡號一般比較長,這裏認爲是10位到20位之間都算是銀行卡號
		String regex1 = "621\\d{10,20}";

		String s = in.nextLine();
		
		if(s.matches(regex1)){
			System.out.println("請不要在聊天中發送銀行卡號等信息");
		}
    2. 識別不文明用語:    
//"垃圾"這兩個漢字的Unicode編碼如下
//'.'可以匹配任意的字符,*表示前面的子表達式可以出現0次或多次
String regex2 = ".*\u5783\u573e.*";
String s = in.nextLine();
  if(s.matches(regex2)){
  	System.out.println("請文明上網");   
  }
    3. 從郵箱中分離出用戶名:    
//郵箱格式表達式
		String regex = "[a-zA-Z]\\w{6,12}@\\w{2,4}\\.(com|cn|org|net|gov)";		
		while(true){
    		String s = in.nextLine();
    		String[] ss = s.split("@");
            //判斷是否符合要求,如果不符合提示出原因
    		if(!s.matches(regex)){            	
            	//判斷用戶是否是數字開頭
            	if(Character.isDigit(ss[0].charAt(0))){
            		System.out.println("用戶名不能以數字開頭!");
            	}
            	//判斷用戶名長度
            	if(ss[0].length() < 6 || ss[0].length() > 12){
            		System.out.println("用戶名長度在6-12之間");
            	} 
            }else{
            	System.out.println("郵箱符合要求,用戶名爲: "+ss[0]);            	
            }
		}

    
        

    
發佈了105 篇原創文章 · 獲贊 34 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章