java正則表達式簡略應用和網頁爬蟲的制造代碼。本站提示廣大學習愛好者:(java正則表達式簡略應用和網頁爬蟲的制造代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是java正則表達式簡略應用和網頁爬蟲的制造代碼正文
正則表達式是一種專門用於對字符串的操作的規矩。
1.在String類中就有一些辦法是對字符串停止婚配,切割。
斷定字符串能否與給出的正則表達式婚配的:boolean matches( String regex);
依照給定的正則表達式對字符串停止切割的:String[] split(String regex);
將相符正則表達式的字符串調換成我們想要的其他字符串:String replaceAll(String regex,String replacement)
2.上面引見一下正則表達式經常使用的用法
(1)
String regex="[1-9][0-9]{4,15}";
//[1-9]表現這個數字只能在1-9內選擇
//[0-9]表現這個數字可所以0-9
//{4,15}表現其後面的這個格局的數字可以反復4-15次
這個正則表達式的意思 是:第一個數字應當是1-9中隨意率性的一個,然後緊接著就必需要湧現0-9中的數字中的一種,並且這類數字至多要湧現4次,至少湧現15次
如:
10175 相符
10不相符,由於[0-9]{4,15},至多要湧現4次以上,在這裡只湧現了一次
(2)
[a-zA-Z0-9_]{6}表現正好要湧現6次a-z或A-Z或_ 中的字符
+表現至多湧現一次
*表現湧現0次或屢次
?表現湧現一次或0次
(3)依據正則表達式來切割字符串
String str="sjd.ksdj.skdjf";
String regex="\\.";
留意: . 在正則表達式中是表式一個隨意率性的字符,是一個特別的符號。我們想要用.來切割,就必需將其轉換為通俗字符 用\\便可。
由於\ 也是特別符號,所以要兩個\\來表現。當我們想要應用通俗的 \ 時,那末就要用\\\\來表現才可。
String[] ss=str.split(regex); 前往字符串數組: "sjd" "ksdj" "skdjf" 完成 了對原有字符串的切割
(4)依據正則表達式來調換失落我們想要調換的器械
將字符串中一切持續湧現5個或以上的數字串調換成#
String str="abcd1334546lasjdfldsf2343424sdj";
String regex="[0-9]{5,}";
String newstr=str.replaceAll(regex,"#");
(5)獲得相符正則表達式規矩的字符串
Pattern p=Pattern.compile(String regex);
Matcher m=p.matcher(String str);
while(m.find())
{
System.out.println(m.group());
}
3.網頁爬蟲的制造
我們制造 一個可以將一個網頁中的全體的郵箱讀掏出,而且寄存在一個文本文件中。
/*
網頁爬蟲
即:從網頁中獲得相符正則表達式的字符串或內容
從收集中獲得郵箱地址
*/
import java.io.*;
import java.util.regex.*;
import java.net.*;
class MailTest
{
public static void main(String[] args) throws Exception
{
getMailAddr();
}
public static void getMailAddr()throws Exception
{
URL url=new URL("http://bbs.jb51.net/topics/390148495");
URLConnection con=url.openConnection();
BufferedReader bufIn=new BufferedReader(new InputStreamReader(con.getInputStream()));
BufferedWriter bufw=new BufferedWriter(new FileWriter(new File("e://mailaddress.txt")));
String str=null;
String regex="[a-zA-Z0-9_]{6,12}@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
Pattern p=Pattern.compile(regex);
while((str=bufIn.readLine())!=null)
{
Matcher m=p.matcher(str);
while(m.find())
{
String ss=m.group();
bufw.write(ss,0,ss.length());
bufw.newLine();
bufw.flush();
}
}
}
}