『黑馬程式設計師』---java--網路程式設計--正則表示式
----------- android培訓、java培訓、java學習型技術部落格、期待與您交流! ------------
RegEx
正則表示式:符合一定規則的表示式
作用:用於專門操作字串[操作字串的一種規則]
特點:用一些特定的符號來表示一些程式碼操作.這樣就可以簡化書寫
好處:可以簡化對字串的複雜操作
弊端:符號定義越多,正在越長,閱讀性越差….
學習正則表示式,就是在學習一些特殊符號的作用.
具體操作功能:
1,匹配match-es[匹配]
boolean |
用規則匹配整個字串,只要有一處不符合,就返回flase.
2,切割sp-lit[劈開]
注意: ((A)(B(C)))-----一共為四組,只要看單個的開括號就成了.
3替換re-pla-ce[替換]
replaceAll(String regex, String 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();
}
}