java基礎_14_正則表達式

正則表達式 (Pattern)  

用於對字符串進行操作。

 

好處:可以簡化對字符串的複雜操作

弊端:符號定義越多,正則越長,閱讀性越差

 

注意:在寫預定義字符類時 \和字母都是一個整體,\本身是一個轉義字符,所以如\d 要寫成 \\d  

 

常用功能:

1,匹配 matches(String regex)

匹配過程中只要有一個不符全規則,就結束,返回false 

例:

要求:一串數字  1,長度爲5-10    20不能開頭   3,帳號只能是數字

    public void method(String qq)
    	{
    		String regex = "[1-9][0-9]{4,9}"; 
    		/*
     意思:第一位數在1-9之間,第二位數在0-9之間,第二位可以有4-9個數字。
    		{}表示數量,看java.util.regex或 matches(String regex)
    */
    		boolean flag = qq.matches(regex);
    		if(flag)
    			System.out.println("qq "+qq);
    		else
    			System.out.println("帳號不對");
    	}

要求:匹配電話號碼:開頭只能是 13*******;15******;或18*******

String regex = "1[358][0-9]{9}";

或寫成String regex = "1[358]\\d{9}"; 

//解說:第一位必須是1,第二位只能是358,第三位開始只能是9位且滿足0-9

 

網頁爬蟲(蜘蛛)

       --> 把滿足郵箱格式的郵箱給取出來

    public void getMails_2()  throws Exception
    {
    		URL url = new URL("http://www.baidu.com");
    
    		URLConnection uc = url.openConnection();  //獲取連接
    
    		BufferedReader bufr = 
    			new BufferedReader(new InputStreamReader(uc.getInputStream()));
    
    		String mailregex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
				
    		Pattern p = Pattern.compile(mailregex);
    
    		String line = null;
    		while ((line=bufr.readLine())!=null)
    		{
    			Matcher m = p.matcher(line);
    			while (m.find())  //按規則,滿足返回true,並指向下一位
    			{
    				System.out.println(m.group());
    			}		
    		}
    	}

2,切割 split(String regex)

以一定規則把字符串進行切割。返回字符數組。

例:

String[] arr = str.split(regex);

regex = " +" ;  以一個或多個空格切割

"\\.";   以 . 切割,注意:在正則中.表示任意,所以要加\\轉義

"\\\\"    以 \\ 切割

 

以疊詞切割  -->  "(.)\\1"   (.)\1 切割 因爲放在字符串中,轉義所以要寫成(.)\\1  

.)是任意的意思\1是一組的意思

 

3,替換 replaceAll(String regex, String replacement)

例:

將字符串中數字連續>=5個的變成一個#

replaceAll(str,"\\d{5,}","#");

 

將疊詞 替換成 *

replaceAll(str,"(.)\\1+","*");

 

注意:用()表示分組的意思,$表示保留這個分組

如:我我要要要學學學學   變成:我要學

replaceAll((.)\\1,$1);

$1表示:替換成()這個組裏面的。

 

例:將 112.46.33.3  IP地址每段補兩個0  如 : 00112.0046.0033.003

replaceAll("([0-9]+)","00$1");

 

使其都保留成3

replaceAll("0*([0-9]{3})","$1");

 

心得:還可以使用替換功能來去掉字符串中不想要的字符

如:我。。。。要學  變成:我要學

str.replaceAll(\\.,””);

 

4,獲取 compile 將字符串中的符合規則的子串取出。

操作步驟:

1,將正則表達式封裝成對象

Pattern p = Pattern.compile(regex);

 

2,讓正則對象和要操作的字符串相關聯

Matcher m = p.matcher(str);

 

3,關聯後,獲取正則匹配引擎

boolean b = m.find(); //將規則作用到字符串上,並進行符合規則的子串查找,有就返回true.

 

4,通過引擎對符合規則的子串進行操作,比如取出

m.group();

例:

找出字符串中單詞長度爲3的單詞

    String str = "ming tian jiu yao   fang jia le ,da jiao-shi";
    
    String regex = "\\b[a-z]{3}\\b";      \b是單詞邊界
    
    Pattern p = Pattern.compile(regex);
    
    Matcher m = p.matcher(str);
    
    while (m.find()) //如果滿足規則,就返回true,並往指向下一個子串
    {
    	System.out.println(m.group());
    	System.out.println("--------"+m.start()+"....."+m.end());//取出單詞前後的角下標
    }

 

如何選取所須要的方法?

1,如果只是想知道字符是否對錯,用匹配。

2,想要將已有字符變成另一個字符串,用替換。

3,想要按照自定的方式將字符串變成多個子字符串,用切割。

4,想要拿到符合需求的字符串的子串,用獲取。

 

心得:在操作字符串的時候,使用正則表達式來完成。很方便。

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