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

目錄

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

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

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

(1)字符類

(2)預(yù)定義符

(3)數(shù)量詞

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

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

(2)簡單爬蟲

(3)爬取電話和郵箱

(4)條件爬取

(5)貪婪和非貪婪爬取

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


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

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

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

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

(1)字符類
[abc]              只能是abc其中一個字符
[^abc]             abc這三個字符不可以被選擇,其他字符可以
[a-zA-Z]           只能在a-z和A-Z這兩個區(qū)間中選擇,兩個區(qū)間以外的字符不可被選
[a-z[A-Z]]         和第三種的意思是一樣的,只能在兩個區(qū)間中被選擇
[a-z&&[def]]       a-z和def的交集,也就是說只能取def這三個字符其中之一
[a-z&&[^def]]      a-z中并且出了def的字符
[a-z&&[^m-p]]      a-z中除了m-p的字符,也就是[a-lq-z]
(2)預(yù)定義符
.      任意字符
\d     一個數(shù)字[0-9]
\D     非數(shù)字[^0-9]
\s     一個空白字符[\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次但是不超過m次

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

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

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

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

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

public class Test {
    public static void main(String[] args){
          String s="市東南部ujbis1Java12史努比偶數(shù)" +
                  "圣誕節(jié)你為奶茶店搜防靜電Java1山東噢in計算Jav為oio看上你" +
                  "Java19是可能空島生存·Java30搜堅定Java=數(shù)據(jù)庫你打算";
          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)爬取電話和郵箱

需求:在一段文本中,爬取電話號碼和郵箱

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

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

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

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

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

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

public class Test {
    public static void main(String[] args){
        String s="是的蘇北jaVa18是可能都跑了實力派我JaVA89osadisd我的是極品搜" +
                "JAVA17isadhoJAVA11安排激動java10時都是你我說的菜農(nóng)Java12是哦滑動SOL" +
                "是冬季是破煩巴薩jAvA8開始就等你";
        String re1="((?i)java)(?=8|7|17)";//查找只輸出前面的java部分
        String re2="((?i)java)(?:7|8|17)";//查找同時也輸出后面的部分,也可以寫成((?i)java)(7|18|17)
        String re3="((?i)java)(?!7|8|17)";//查找除了版本號是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ù)據(jù)
非貪婪爬取:在爬取數(shù)據(jù)的時候盡可能少獲取數(shù) 據(jù)
只寫+,*表示貪婪爬取(Java中默認(rèn)是貪婪爬?。?+?,+*表示非貪婪爬取

public class Test {
    public static void main(String[] args){
        String s="搜絕對是你uiuisudjh怕端口abbbbb啥動靜那等";
        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á)式中的使用
這里主要介紹兩個方法:replaceAll和split
replaceAll(規(guī)則,代替的字符串)    將字符串中符合規(guī)則的字符串替換成代替的字符串,返回值是修改后的 
                                 字符串,原來的字符串時不會發(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級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

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

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

廣告

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