--------------ASP.Net+Android+IOS開發 . .Net教育訓練.-----期待與您交流! --------
1. 正規表達式的概述和作用。
概述:正規表達式就是專門操作的字元串的,
優點:可以減少代碼。簡化書寫
特點:就是用些特殊的字元來表示代碼,更簡便。
缺點:對于複雜的正規表達式,閱讀性比較差。
2. 比對—正則表示式
1. 方法
利用的是String類中的matchs(String regx).
2. QQ号碼驗證
public class QQ {
public static void main(String[]args) {
/**
* 要求:第一位不能0,長度為5-15位
*/
Stringqq = "770700715";// qq号碼
StringqqRegx = "[1-9]\\d{4,14}";// 正規表達式的判定字元串
if (qq.matches(qqRegx))
System.out.println("qq:" + qq + "是正确的!");
else
System.out.println("qq:" + qq + "是錯誤的!");
}
}
3. 郵箱驗證
public class Email {
public static void main(String[] args) {
/**
* 要求:必須有@符号,有.符号
* @符号前面可以是大小寫,數字和下劃線 (長度3-10)位
* @符号和.之間可以是大小寫和數字。(長度2-3)為最後是以com結尾
*
*/
String emali = "[email protected]";
String emailRegx = "\\w{3,10}@[a-zA-Z0-9]{2,3}\\.com";
if (emali.matches(emailRegx))
System.out.println("郵箱正确");
else
System.out.println("郵箱錯誤");
}
}
注意點:對于\w表示的是【a-zA-Z_0-9】,因為\會被轉義的,是以必須要寫成\\w
同理,在字元串中要是有點(.)的話,那麼要寫成(\\.)
4. 中文名字驗證
public class Name {
public static void main(String[] args) {
/**
* 要求:名字是漢字的話,那麼是2-3個漢字
* 名字要是字元的話,那麼就是6-12位
*/
String nameRegx="([\u4E00-\u9FA5]{2,3})||([A-Za-z]{6,12})";
String name="李四";
if(name.matches(nameRegx))
System.out.println("名字正确");
else
System.out.println("名字不正确");
}
}
3. 分割—正規表達式
1. 分割含有轉義符号的字元串
public class Spit {
public static void main(String[] args) {
/**
* C:\a\b\123.txt 将前面的路徑按照 \ 分割
* 因為要把其分裝到字元串("C:\a\b\123.txt")中,\a會把其轉義,是以必須這樣寫"C:\\a\\b\\123.txt"
* 因為還要按照\分割出來也要把分割規則封裝成字元串,是以要使用"\\"
* 因為"C:\\a\\b\\123.txt"中都是兩個\\是以要增加一個雙\\,即"\\"
*/
spitString("C:\\a\\b\\123.txt","\\\\");
}
public static void spitString(String str,String regex){
String [] ss=str.split(regex);
for(String n: ss)
System.out.println(n);
}
}
2. 利用組來分割
組:就是把分割規則的結果還重複使用,使用()進行劃分,那麼就使用組,例如疊詞。組還分号,從1開始分組,記憶小技巧:有幾個括号就分為幾個組,從左邊開始數左括号,第一個左括号就是第一組,以此類推.
public class Spit {
public static void main(String[] args) {
/*
* 按照疊詞進行分割,那麼就是使用組
* 在正規表達式中。 .表示任意字元,(.)\1表示第二個位置的和第一個位置的相同,\1
* 因為要封裝到字元串中,\1會呗轉義,是以要"(.)\\1"
* 要是是多個相同的話,那麼就"(.)\\1+"
*/
spitString("1235ddd56ssd11de","(.)\\1+");
}
public static void spitString(String str,String regex){
String [] ss=str.split(regex);
for(String n: ss)
System.out.println(n);
}
}
3.轉義群組的結構圖
4. 擷取—正則表示式
步驟:
1. 将正規表達式封裝成對象。
2. 将正規表達式和比對的字元串關聯起來
3. 擷取字元串的比對器
4. 通過比對器引擎對字元串進行操作,例如:擷取
注意:其實String類中的替換,比對都是Pattern和Matcher綜合運用,最後被String類封裝了,操作就簡單了,但是String類中還有沒有在Matcher類中沒有封裝的方法,例如:擷取。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class find {
public static void main(String[] args) {
String str="123 56254855 452 1 56 458";//字元串
String regex="\\b\\d{3}\\b";//表示連續三個數字
// \\d{3}比對規則 \b表示的單詞邊界
/*将正規表達式封裝成對象*/
Pattern pat=Pattern.compile(regex);
/*将正規表達式和字元串關聯起來,獲得比對器*/
Matcher matcher= pat.matcher(str);
while(matcher.find()){//開始比對
System.out.println(matcher.group());//擷取比對的内容
}
}
}
注意:在擷取的時候,必須先去比對,然後再去擷取,比對的時候,要注意比對索引的變化。(start()和 end())
5. 替代—正規表達式
public class Replay {
public static void main(String[] args) {
/**
* 将字元串中連續兩個以上的數字替換成成#号
*/
replayDemo("123ddd6ddf41y2y1d","\\d{2,}","#");
/**
* 将字元串中的疊詞用一個字元來替換,就用到了組,其中$1表示的是組中的第一組
*/
replayDemo("a1113dfgkkksppd","(.)\\1+","$1");
}
public static void replayDemo(String str,String regex,String s){
str=str.replaceAll(regex,s);
System.out.println(str);
}
}
6. 網頁爬蟲—正規表達式
就是讀取 檔案的内容或者是一個網上的網頁内容,從其中找出你想要的内容,例如:郵箱位址,下面就是介紹擷取郵箱的位址。
步驟:
1. 擷取讀取檔案的流,
2. 擷取正規表達式的比對器
3. 然後開始讀取檔案,一行一行的讀取,在循環讀取的時候,每一行都要與比對器比對
4. 然後把比對的内容讀取出來後,寫入到另一個檔案中。
5. 最後關閉流。
讀取檔案的--爬蟲
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FindEmail {
public static void main(String[] args) throws Exception {
File file=new File("F:\\mail.txt");
BufferedReader buf=new BufferedReader(new FileReader(file));//讀檔案流
String regex="\\w+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";
Pattern p=Pattern.compile(regex);
BufferedWriter writer=new BufferedWriter(new FileWriter("F:\\newMail.txt"));//寫檔案流
String line=null;
while((line=buf.readLine())!=null){//讀取檔案
Matcher matcher=p.matcher(line);
while(matcher.find()){//比對
/*将擷取的郵箱名寫到另一個檔案中*/
writer.write(matcher.group());//擷取
writer.newLine();//換行
writer.flush();//重新整理
}
}
writer.close();
buf.close();
}
}
讀取網上網頁的上的郵箱位址--爬蟲
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FindEmaliByWangye {
public static void main(String[] args) throws IOException {
URL url = new URL("http://localhost:8088/android/index.jsp");
URLConnection conn = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn
.getInputStream()));
String regex = "\\w+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";
Pattern p = Pattern.compile(regex);
String line = null;
while ((line = reader.readLine()) != null) {// 讀取檔案
Matcher matcher = p.matcher(line);
while (matcher.find()) {// 比對
System.out.println(matcher.group());
}
}
reader.close();
}
}
7. 練習---正規表達式
public class regexText {
public static void main(String[] args) {
/*将此字元串變成我要學程式設計*/
String str = "我我我....我我我....我我我....要要要......要要要......要要要......學...學學學學...編編....程程...";
str=str.replaceAll("\\.+", "");
str=str.replaceAll("(.)\\1+", "$1");
System.out.println(str);
}
}
結果:我要學程式設計
---------------------- ASP.Net+Android+IOS開發 . .Net教育訓練.-----------期待與您交流! -------------------