Java---正則表達(dá)式-創(chuàng)新互聯(lián)

目錄

成都創(chuàng)新互聯(lián)長(zhǎng)期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為臨潁企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站制作,臨潁網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

一、正則表達(dá)式的介紹

二、正則表達(dá)式的基本語(yǔ)法

(1)字符類

(2)預(yù)定義符

(3)數(shù)量詞

三、正則表達(dá)式的具體實(shí)例

(1)判斷電話號(hào)碼是否符合規(guī)則

(2)簡(jiǎn)單爬蟲(chóng)

(3)爬取電話和郵箱

(4)條件爬取

(5)貪婪和非貪婪爬取

(6)正則表達(dá)式在字符串表達(dá)式中的使用


一、正則表達(dá)式的介紹

正則表達(dá)式是對(duì)字符串操作的邏輯表達(dá)式,說(shuō)的是不是有點(diǎn)抽象呢,那說(shuō)說(shuō)它的作用其實(shí)更加好懂。正則表達(dá)式可以校驗(yàn)字符串是否符合規(guī)則(規(guī)則由你定),這樣的話你就可以在一段文本內(nèi)容中查找你想要的內(nèi)容了

二、正則表達(dá)式的基本語(yǔ)法

上面說(shuō)過(guò)了正則表達(dá)式其實(shí)就是對(duì)于一個(gè)字符串根據(jù)你制定的規(guī)則做出的一個(gè)邏輯判斷,所以我們會(huì)使用其中的一個(gè)API,也就是matches函數(shù),參數(shù)是你制定的規(guī)則,返回值是boolean型。即字符串.matches(規(guī)則)

(1)字符類
[abc]              只能是abc其中一個(gè)字符
[^abc]             abc這三個(gè)字符不可以被選擇,其他字符可以
[a-zA-Z]           只能在a-z和A-Z這兩個(gè)區(qū)間中選擇,兩個(gè)區(qū)間以外的字符不可被選
[a-z[A-Z]]         和第三種的意思是一樣的,只能在兩個(gè)區(qū)間中被選擇
[a-z&&[def]]       a-z和def的交集,也就是說(shuō)只能取def這三個(gè)字符其中之一
[a-z&&[^def]]      a-z中并且出了def的字符
[a-z&&[^m-p]]      a-z中除了m-p的字符,也就是[a-lq-z]
(2)預(yù)定義符
.      任意字符
\d     一個(gè)數(shù)字[0-9]
\D     非數(shù)字[^0-9]
\s     一個(gè)空白字符[\t\n\f\r]
\S     非空白字符
\w     [a-zA-Z_0-9]英文數(shù)字下劃線
\W     除了英文數(shù)字下劃線
(3)數(shù)量詞
x?      x出現(xiàn)了一次或者是0次
x+      x出現(xiàn)了一次或者多次
x*      x出現(xiàn)了0次或者是多次
x{n}    x出現(xiàn)了正好是n次
x{n,}   x出現(xiàn)了至少n次
x{n,m}  x出現(xiàn)了至少是n次但是不超過(guò)m次

這里我提醒大家一下,千萬(wàn)要看清楚你寫(xiě)的規(guī)則是匹配一個(gè)字符還是多個(gè)字符??

三、正則表達(dá)式的具體實(shí)例 (1)判斷電話號(hào)碼是否符合規(guī)則

需求:十一個(gè)數(shù)字,第一個(gè)數(shù)字只能是1,最后一個(gè)數(shù)字不能是0。

public class Test {
    public static void main(String[] args){
           Scanner sca=new Scanner(System.in);
           System.out.print("請(qǐng)輸入你的電話號(hào)碼:");
           String s=sca.next();//電話號(hào)碼
           String rule="1[0-9]{9}[1-9]";//定義的規(guī)則
           System.out.print(s.matches(rule));
    }
}
(2)簡(jiǎn)單爬蟲(chóng)

需求:一段文本中查找Java或者是Java出現(xiàn)的版本號(hào)

public class Test {
    public static void main(String[] args){
          String s="市東南部ujbis1Java12史努比偶數(shù)" +
                  "圣誕節(jié)你為奶茶店搜防靜電Java1山東噢in計(jì)算Jav為oio看上你" +
                  "Java19是可能空島生存·Java30搜堅(jiān)定Java=數(shù)據(jù)庫(kù)你打算";
          String regex="Java\\d{0,2}";
          Pattern p= Pattern.compile(regex);
          Matcher m=p.matcher(s);
          while(m.find()){
              System.out.println(m.group());
          }
    }
}
(3)爬取電話和郵箱

需求:在一段文本中,爬取電話號(hào)碼和郵箱

public class Test {
    public static void main(String[] args){
         String s="81是的配送費(fèi)打開(kāi)你發(fā)182654678541所點(diǎn)擊時(shí)間內(nèi)" +
                 "ujhgtr@163.com搜的金絲楠18871110981是啊都是你的手機(jī)卡圣誕節(jié)迫使@163.com" +
                 "搜堅(jiān)定yuhsyw@163.coomi1搜電腦172890987665搜絕對(duì)是gygwas163.com庶竭駑鈍" +
                 "18235454567是第幾行你UIUIu@163.com我似乎單詞表18765432140";
         String re1="1\\d{9}[1-9]";//電話號(hào)碼
         String re2="[a-zA-Z]{6}@163.com";
         String re=re1+"|"+re2;//兩個(gè)規(guī)則滿足其中之一即可,用豎線
         Pattern p=Pattern.compile(re);
         Matcher m=p.matcher(s);
         while(m.find()){
                System.out.println(m.group());
          }
    }
}

(4)條件爬取
((?i)java)  忽略Java的大小寫(xiě)

(java)(?=7|8)   這里的問(wèn)號(hào)其實(shí)可以理解成占位符,總體表達(dá)的意思是查找java7或者java8并且輸出時(shí)
                不顯示java后面的的版本號(hào)

(java)(?:7|8)  與上面相反,它是顯示后面的版本號(hào)的

(java)(?!7|8)   查找除了java7和java8

需求:在一段文本中查找Java和Java17,Java8,Java7(忽略大小寫(xiě))

public class Test {
    public static void main(String[] args){
        String s="是的蘇北jaVa18是可能都跑了實(shí)力派我JaVA89osadisd我的是極品搜" +
                "JAVA17isadhoJAVA11安排激動(dòng)java10時(shí)都是你我說(shuō)的菜農(nóng)Java12是哦滑動(dòng)SOL" +
                "是冬季是破煩巴薩jAvA8開(kāi)始就等你";
        String re1="((?i)java)(?=8|7|17)";//查找只輸出前面的java部分
        String re2="((?i)java)(?:7|8|17)";//查找同時(shí)也輸出后面的部分,也可以寫(xiě)成((?i)java)(7|18|17)
        String re3="((?i)java)(?!7|8|17)";//查找除了版本號(hào)是8,7,,17
        System.out.println("規(guī)則1");
        Pattern p1=Pattern.compile(re1);
        Matcher m1=p1.matcher(s);
        while(m1.find()){
            System.out.println(m1.group());
        }
        System.out.println("規(guī)則2");
        Pattern p2=Pattern.compile(re2);
        Matcher m2=p2.matcher(s);
        while(m2.find()){
            System.out.println(m2.group());
        }
        System.out.println("規(guī)則3");
        Pattern p3=Pattern.compile(re3);
        Matcher m3=p3.matcher(s);
        while(m3.find()){
            System.out.println(m3.group());
        }

    }
}

(5)貪婪和非貪婪爬取
貪婪爬取:在爬取數(shù)據(jù)的時(shí)候盡可能的多獲取數(shù)據(jù)
非貪婪爬?。涸谂廊?shù)據(jù)的時(shí)候盡可能少獲取數(shù) 據(jù)
只寫(xiě)+,*表示貪婪爬?。↗ava中默認(rèn)是貪婪爬?。?+?,+*表示非貪婪爬取

public class Test {
    public static void main(String[] args){
        String s="搜絕對(duì)是你uiuisudjh怕端口abbbbb啥動(dòng)靜那等";
        String rex1="ab+";
        String rex2="ab?+";
        Pattern p1=Pattern.compile(rex1);
        Pattern p2=Pattern.compile(rex2);
        Matcher m1=p1.matcher(s);
        Matcher m2=p2.matcher(s);
        System.out.println("貪婪爬取");
        while(m1.find()){
            System.out.println(m1.group());
        }
        System.out.println("非貪婪爬取");
        while(m2.find()){
            System.out.println(m2.group());
        }
    }
}

(6)正則表達(dá)式在字符串表達(dá)式中的使用
這里主要介紹兩個(gè)方法:replaceAll和split
replaceAll(規(guī)則,代替的字符串)    將字符串中符合規(guī)則的字符串替換成代替的字符串,返回值是修改后的 
                                 字符串,原來(lái)的字符串時(shí)不會(huì)發(fā)生變化的
split(規(guī)則)                      根據(jù)規(guī)則切割,返回值是字符串?dāng)?shù)組
public class Test {
    public static void main(String[] args){
        String s="李三sodjsodjso張三豐0osodndn王天霸";

        String ss=s.replaceAll("[a-zA-Z0-9]+","vs");
        System.out.println(ss);
        String[] sc=s.split("[0-9a-zA-Z]+");
        System.out.println("字符串?dāng)?shù)組:");
        for(int i=0;i

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站名稱:Java---正則表達(dá)式-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)源:http://www.muchs.cn/article42/dcddhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、域名注冊(cè)、關(guān)鍵詞優(yōu)化App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)