天天看點

<<正規表達式>>--黑馬程式員1.  正規表達式的概述和作用。2.  比對—正則表示式3. 分割—正規表達式4. 擷取—正則表示式5. 替代—正規表達式6. 網頁爬蟲—正規表達式7. 練習---正規表達式

--------------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.轉義群組的結構圖

<<正規表達式>>--黑馬程式員1.  正規表達式的概述和作用。2.  比對—正則表示式3. 分割—正規表達式4. 擷取—正則表示式5. 替代—正規表達式6. 網頁爬蟲—正規表達式7. 練習---正規表達式

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教育訓練.-----------期待與您交流! -------------------