国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

黑馬程序員——【Java基礎】——正則表達式

2019-11-14 21:16:45
字體:
來源:轉載
供稿:網友
黑馬程序員——【java基礎】——正則表達式

---------- android培訓、java培訓、期待與您交流! ----------

一、概述

  1、 概念:符合一定規則的表達式。

  2、 作用:用于專門操作字符串。

  3、 特點:用一些特定的符號來表示一些代碼操作,這樣可以簡化書寫。

  4、 好處:可以簡化對字符串的復雜操作。

  5、 弊端:符合定義越多,正則越長,閱讀性越差。

二、常見規則

  1、字符類

    [abc]:表示a、b或 c

    [^abc]:表示任何字符,除了 a、b或 c

    [a-zA-Z]:表示a到 z或 A 到 Z

    [a-d[m-p]]:表示a到 d或 m 到 p([a-dm-p](并集))

    [a-z&&[def]]:d、e或 f(交集)

    [a-z&&[^bc]]:表示a到 z,除了 b和 c:[ad-z](減去)

    [a-z&&[^m-p]]:表示a到 z,而非 m到 p:[a-lq-z](減去)

  2、預定義字符

    . : 任何字符(與行結束符可能匹配也可能不匹配)

    /d:數字:[0-9]

    /D:非數字: [^0-9]

    /s:空白字符:[ /t/n/x0B/f/r]

    /S:非空白字符:[^/s]

    /w:單詞字符:[a-zA-Z_0-9]

    /W:非單詞字符:[^/w]

  3、邊界匹配符

    ^:行的開頭

    $ :行的結尾

    /b:單詞邊界

    /B:非單詞邊界

    /A:輸入的開頭

    /G:上一個匹配的結尾

    /Z:輸入的結尾,僅用于最后的結束符(如果有的話)

    /z:輸入的結尾

  4、Greedy數量詞

    X? :X出現一次或一次也沒有

    X*:X出現零次或多次

    X+: X出現一次或多次

    X{n}:X恰好 n次

    X{n,}:X至少 n次

    X{n,m}X:至少 n次,但是不超過 m 次

  5、組和捕獲

    捕獲組可以通過從左到右計算其開括號來編號。例如,在表達式 ((A)(B(C)))中,存在四個這樣的組:

    1 ((A)(B(C)))

    2 /A

    3 (B(C))

    4 (C)

    組零始終代表整個表達式,在替換中常用$匹配組的內容。

三、正則表達式常見功能

  正則表達式常見功能,主要有四種:匹配、切割、替換和獲取

  1、匹配

    String類中的boolean matches(String regex)方法。用規則匹配整個字符串,只要有一處不符合規則,就匹配結束,返回false。

  2、切割

    String類中的String[] split(String regex)方法。

  3、替換

    String replaceAll(String regex , String replacement)方法。示例:

    String str = “zhangsantttxiaoqiangmmmzhan”

    str = str.replaceAll(“(.)//” , );

  4、獲取

    獲?。菏菍⒆址蟹弦巹t的子串取出。

    操作步驟:

     (1)將正則表達式封裝成對象。Pattern p = Pattern.compile(regex);

     (2)讓正則對象和要操作的字符串相關聯。Matcher m = p.matcher(str);

    ?。?)關聯后,獲取正則匹配引擎。

     (4)通過引擎對符合規則的子串進行操作,例如查找、取出。m.find()、m.group();

四、正則表達式應用練習

  練習1:字符串轉換

 1 /* 需求:將下列字符串轉成:我要學編程 2 "我我...我..我要...要...要要....學學....學學學......編編編...程...程程...." 3  4 思路: 5 將已有字符串變成另一個字符串。使用替換功能。 6 1、可以先將 . 去掉。 7 2、再將多個重復的內容變成單個內容。 8 */ 9 class  ReplaceTest{10     public static void main(String[] args){11         String s = "我我...我..我要...要...要要....學學....學學學......編編編...程...程程....";12         System.out.PRintln(s);13   14         String regex = "http://.+";//先將 . 去掉15         s = s.replaceAll(regex,"");//去掉 .16         System.out.println(s);17   18         regex = "(.)//1+";//將重復的內容變成單個內容19         s = s.replaceAll(regex,"$1");//去重20         System.out.println(s);21     }22 }

  練習2:將ip地址進行地址段順序的排序。

 1 /* 需求:將ip地址進行地址段順序的排序。 2 192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.301  3  4 思路: 5 還按照字符串自然順序,只要讓他們每一段都是3位即可。 6 1、按照每一段需要的最多的0進行補齊,那么每一段就會至少保證有3位。 7 2、將每一段只保留3位。這樣,所有的ip地址都是每一段3位。 8 */ 9 import java.util.*;10 class IPSortTest{11     public static void main(String[] args){12         String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.301";13         System.out.println(ip);14   15         String regex = "(//d+)";16         ip = ip.replaceAll(regex,"00$1");//保證每段至少都有三位-------------17         System.out.println(ip);18   19         regex = "0*(//d{3})";20         ip = ip.replaceAll(regex,"$1");//每段只保留三位21         System.out.println(ip);22   23         regex = " ";24         String[] arr = ip.split(regex);//按照空格切25         26         //定義一個TreeSet集合,利用元素自然排序27         TreeSet<String > ts = new TreeSet<String>();28         for (String str : arr ){29             ts.add(str);//添加30         }31         regex = "0*(//d)";//把每段前面多余的0替換掉32         for (String s : ts){33             System.out.println(s.replaceAll(regex,"$1"));//把每段前面多余的0替換掉34         }35     }36 }

  練習3:郵件地址校驗

 1 //需求:對郵件地址進行校驗。 2 class CheckMail{ 3     public static void main(String[] args){ 4         String mail = "123a809bc@sina.com.cn"; 5         String regex = "http://w+@[a-zA-Z0-9]+(//.[a-zA-Z]+){1,3}";//較為精確 6         regex = "http://w+@//w+(//.//w+)+";//相對不太精確的匹配。 7         boolean b = mail.matches(regex); 8         System.out.println(b); 9     }10 }

  練習4:網絡爬蟲

/* 網絡爬蟲實際上是一個功能,用于搜集網絡上的指定信息需求:可用于收集郵箱,QQ號等之類的信息。*/import java.net.*;import java.util.regex.*;import java.io.*;class Spider{    public static void main(String[] args)throws Exception{        //getFileMail();        getWebMail();    }      //獲取網頁中mail    public static void getWebMail()throws Exception{        //封裝網頁地址        URL url = new URL("http://tieba.baidu.com/p/1390896758");        //連接服務器        URLConnection conn = url.openConnection();        //帶緩沖區的網頁讀取流        BufferedReader br  =  new BufferedReader(new InputStreamReader(conn.getInputStream()));        String line = null;        //定義匹配郵件地址的正則表達式        String regex = "http://w+@//w+(//.//w+)+";        Pattern p = Pattern.compile(regex);//封裝正則表達式        //讀取網頁數據        while ((line = br.readLine())! = null){            //正則關聯數據            Matcher m = p.matcher(line);            //尋找匹配郵箱            while (m.find()){                System.out.println(m.group());//輸出匹配郵箱            }        }    }      //獲取指定文檔中的郵件地址。使用獲取功能。Pattern Matcher    public static void getFileMail()throws Exception{        //將文件封裝成對象        File file = new File("E://Java Study//Practice//day25//mail.txt");        //創建帶緩沖區的讀取流        BufferedReader br = new BufferedReader(new FileReader(file));        String line = null;          //定義正則表達式        String regex = "http://w+@[a-zA-Z]+(//.[a-zA-z]+)+";        //創建Pattern對象,封裝正則表達式        Pattern p = Pattern.compile(regex);          //讀取文件中數據        while ((line = br.readLine())! = null){            //關流字符串            Matcher m = p.matcher(line);            while (m.find())//尋找匹配的字符串{                System.out.println(m.group());//輸出匹配的字符串            }        }    }}

---------- android培訓、java培訓、期待與您交流! ----------


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 华亭县| 合江县| 苗栗县| 即墨市| 四平市| 安龙县| 阳东县| 怀柔区| 垦利县| 徐汇区| 晋州市| 卢龙县| 通河县| 松江区| 视频| 嘉义市| 惠水县| 淳化县| 石门县| 芜湖市| 子洲县| 汤原县| 兴义市| 九龙县| 黄骅市| 五寨县| 平乐县| 永善县| 纳雍县| 鄯善县| 高青县| 平江县| 武穴市| 镇江市| 泽库县| 永新县| 鄯善县| 榆林市| 萨嘎县| 绥芬河市| 务川|