1. 程式人生 > >『黑馬程式設計師』---java--網路程式設計--正則表示式

『黑馬程式設計師』---java--網路程式設計--正則表示式

----------- android培訓java培訓、java學習型技術部落格、期待與您交流! ------------

RegEx

正則表示式:符合一定規則的表示式

作用:用於專門操作字串[操作字串的一種規則]

特點:用一些特定的符號來表示一些程式碼操作.這樣就可以簡化書寫

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

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

學習正則表示式,就是在學習一些特殊符號的作用.

具體操作功能:

1,匹配match-es[匹配]

 boolean

matches(String regex)將regex正則表示式作用到該字串上 
告知此字串是否匹配給定的

正則表示式

用規則匹配整個字串,只要有一處不符合,就返回flase.



2,切割sp-lit[劈開]

split(String regex) 
          根據給定正則表示式的匹配拆分此字串。

split(String regex, int limit) 
       根據匹配給定的正則表示式來拆分此字串。

注意:  ((A)(B(C)))-----一共為四組,只要看單個的開括號就成了.


3替換re-pla-ce[替換]

replaceAll(String regex, String replacement) 
使用給定的 replacement 替換此字串所有匹配給定的

正則表示式的子字串。



4,獲取

Patt-ern[模式]  com-pile[編譯] mat-cher[匹配器] se-quence [][序列

字串中的符合規則的子串取出

操作步驟:

>2,讓正則物件和要操作的字串相關聯,並獲取正則匹配引擎

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

java.util.regex 
類 Pattern


java.util.regex 
類 Matcher

 boolean

find() 
  嘗試查詢與該模式匹配的輸入序列的下一個子序列。

group() 
          返回由以前匹配操作所匹配的輸入子序列。

 int

start() 
          返回以前匹配的初始索引。

 int

end() 
          返回最後匹配字元之後的偏移量。

Exercise1:


Exercise2:Ip地址進行地址段的排序


Exercise3:對郵件地址進行校驗


網頁爬蟲(蜘蛛)


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 需求:爬黑馬BBS的使用者。
 * 技術分超過25的
 * 存入一個檔案中。
 * 格式為:姓名xxx UIDxxx 技術分xxx
 */
 

class Url
{
	static String name = null;
	public static void main(String[] args) throws Exception
	{
		BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\io\\person.txt"));
		for(int x=98200;x<100000;x++)
		{
			//建立連線。直接用UEL,很牛的一個物件,
			 URL url = new URL("http://bbs.itheima.com/space-uid-"+x+".html");
			 URLConnection ucc = url.openConnection();
			 BufferedReader br = new BufferedReader(new InputStreamReader(ucc.getInputStream(),"utf-8"));
			 
			//爬這一斷程式碼"數字 </span>技術分"
			 //還爬一下這斷程式碼"name">使用者名稱<"
			 String line = null;
			 while ((line=br.readLine())!=null)
			 {				
				 String regex = "\\d+ </span>技術分";
				 Pattern p = Pattern.compile(regex);
				 Matcher m = p.matcher(line);
				 
				 String regex2 = "name\">.+<";
				 Pattern p2 = Pattern.compile(regex2);
				 Matcher m2 = p2.matcher(line);
				 
				 
				 while (m2.find())
				 {					
					 name = m2.group();
					 name = name.replace( "name\">","");
					 name = name.replace("<", "");
				 }
				 while (m.find())
				 {
					 //把資料存入一個指定的檔案中
					String s= m.group();
					String[] arr = s.split(" </span>");
					if(Integer.parseInt(arr[0])>=25)
					{
						bw.write("姓名:"+name+"\t\tUID:"+x+"\t"+arr[1]+arr[0]);
						bw.newLine();
						bw.flush();
					}
				 }				 
				 
			 }
		}
		bw.close();
		 
	}

}