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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

JAVA基礎(chǔ)學(xué)習(xí)day26--正則表達(dá)式

2019-11-14 15:20:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、正則表達(dá)式

1.1、概述

符合一規(guī)則的表達(dá)式:用于專(zhuān)門(mén)操作字符串。

正則表達(dá)式則必須依靠Pattern類(lèi)與Matcher類(lèi),這兩個(gè)類(lèi)都在java.util.regex包中定義。Pattern類(lèi)的主要作用是進(jìn)行正則規(guī)范的編寫(xiě),而Matcher類(lèi)主要是執(zhí)行規(guī)范,驗(yàn)證一個(gè)字符串是否符合其規(guī)范。

Pattern:

正則表達(dá)式的編譯表示形式。

指定為字符串的正則表達(dá)式必須首先被編譯為此類(lèi)的實(shí)例。然后,可將得到的模式用于創(chuàng)建 Matcher 對(duì)象,依照正則表達(dá)式,該對(duì)象可以與任意字符序列匹配。執(zhí)行匹配所涉及的所有狀態(tài)都駐留在匹配器中,所以多個(gè)匹配器可以共享同一模式。

因此,典型的調(diào)用順序是

 Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches();

 

Matcher:

通過(guò)解釋 Pattern 對(duì) character sequence 執(zhí)行匹配操作的引擎。

通過(guò)調(diào)用模式的 matcher 方法從模式創(chuàng)建匹配器。創(chuàng)建匹配器后,可以使用它執(zhí)行三種不同的匹配操作:

  • matches 方法嘗試將整個(gè)輸入序列與該模式匹配。

  • lookingAt 嘗試將輸入序列從頭開(kāi)始與該模式匹配。

  • find 方法掃描輸入序列以查找與該模式匹配的下一個(gè)子序列。

每個(gè)方法都返回一個(gè)表示成功或失敗的布爾值。通過(guò)查詢(xún)匹配器的狀態(tài)可以獲取關(guān)于成功匹配的更多信息。 

二、正則規(guī)則-預(yù)定義字符類(lèi)

2.1、規(guī)則-預(yù)定義字符類(lèi)

常用正則規(guī)則

 
No.
規(guī)范
描述
No.
規(guī)范
描述
1
//
表示反斜線(xiàn)(/)字符
2
/t
表示制表符
3
/n
表示換行
4
[abc]
字符a、b或c
5
[^abc]
除了a、b、c之外的任意字符
6
[a-zA-Z0-9]
表示由字母、數(shù)字組成
7
/d
表示數(shù)字0-9
8
/D
表示非數(shù)字[^0-9]
9
/w
表示字母、數(shù)字、下劃線(xiàn)
10
/W
表示非字母、數(shù)字、下劃線(xiàn)[^/w]
11
/s
表示所有空白字符(換行、空格等)
12
/S
表示所有非空白字符[^/s]
13
^
行的開(kāi)頭
14
$
行的結(jié)尾
15
.
匹配除換行符之外的任意字符

 

 

 

 

 

2.2、匹配規(guī)則

 

    數(shù)量表示(X表示一組規(guī)范)
 
No.
規(guī)范
描述
No.
規(guī)范
描述
1
X
必須出現(xiàn)一次
2
X?
可以出現(xiàn)0次或1次
3
X*
可以出現(xiàn)0次、1次或多次
4
X+
可以出現(xiàn)1次或多次
5
X{n}
必須出現(xiàn)n次
6
X{n,}
必須出現(xiàn)n次以上
7
X{n,m}
必須出現(xiàn)n~m次

 

 

 

 

 
邏輯運(yùn)算符(X、Y表示一組規(guī)范)
 
No.
規(guī)范
描述
No.
規(guī)范
描述
1
XY
X規(guī)范后跟著Y規(guī)范
2
X | Y
X規(guī)范或Y規(guī)范
3
(X)
做為一個(gè)捕獲組規(guī)范

 

 

 

 

 
2.3、Pattern類(lèi)的常用方法
No.
方法
類(lèi)型
描述
1
public static Pattern compile(String regex)
普通
指定正則表達(dá)式規(guī)則
2
public Matcher matcher(CharSequence input)
普通
返回Matcher類(lèi)實(shí)例
3
public String[] split(CharSequence input)
普通
字符串拆分
在Pattern類(lèi)中如果要想取得Pattern類(lèi)實(shí)例,則必須調(diào)用compile()方法。
2.4、Pattern常用方法
方法摘要
static Patterncompile(String regex)
          將給定的正則表達(dá)式編譯到模式中。
static Patterncompile(String regex, int flags)
          將給定的正則表達(dá)式編譯到具有給定標(biāo)志的模式中。
 intflags()
          返回此模式的匹配標(biāo)志。
 Matchermatcher(CharSequence input)
          創(chuàng)建匹配給定輸入與此模式的匹配器。
static booleanmatches(String regex, CharSequence input)
          編譯給定正則表達(dá)式并嘗試將給定輸入與其匹配。
 Stringpattern()
          返回在其中編譯過(guò)此模式的正則表達(dá)式。
static Stringquote(String s)
          返回指定 String 的字面值模式 String
 String[]split(CharSequence input)
          圍繞此模式的匹配拆分給定輸入序列。
 String[]split(CharSequence input, int limit)
          圍繞此模式的匹配拆分給定輸入序列。
 StringtoString()
          返回此模式的字符串表示形式。
 

 2.5、邊界匹配器

 

邊界匹配器
^行的開(kāi)頭
$行的結(jié)尾
/b單詞邊界
/B非單詞邊界
/A輸入的開(kāi)頭
/G上一個(gè)匹配的結(jié)尾
/Z輸入的結(jié)尾,僅用于最后的結(jié)束符(如果有的話(huà))
/z輸入的結(jié)尾

 

 

三、String對(duì)正則表達(dá)式的支持

 

3.1、常用方法

 

Matcher類(lèi)的常用方法在
No.
方法
類(lèi)型
描述
1
public boolean matches(String regex)
普通
字符串匹配
2
public String replaceAll(String regex,String replacement)
普通
字符串替換
3
public String[] split(String regex)
普通
字符串拆分

 

四、示例

4.1、驗(yàn)證用戶(hù)輸入不是QQ號(hào)

 

/*驗(yàn)證用戶(hù)輸入不是QQ號(hào)QQ號(hào)以1-9開(kāi)頭,5-15位長(zhǎng)度都是數(shù)字使用/d或者[0-9]表示數(shù)字完成*/import java.util.*;import java.util.regex.*;class  RegexDemo1{    public static void main(String[] args)     {            //聲明一個(gè)掃描器的變量,來(lái)接收用戶(hù)鍵盤(pán)輸入        Scanner input=new Scanner(System.in);        //接收輸入數(shù)據(jù)        String qq=input.nextLine();        //調(diào)用校驗(yàn)        checkQQ(qq);    }    /*    校驗(yàn)QQ    */    public static void checkQQ(String qq)    {        //定義正則        //String regex="^[1-9]//d{4,14}$";        String regex="[1-9][0-9]{4,14}";        //獲取Pattern對(duì)象        Pattern p=Pattern.compile(regex);        //驗(yàn)證字符串內(nèi)容是否符合正則        Matcher m=p.matcher(qq);        //判斷        if(m.matches())        {            System.out.);        } else        {        System.out.println(qq+"不是合法的QQ!");        }    }}

 

 

 

 

4.2、驗(yàn)證手機(jī)號(hào)碼是不是正確

 

 

4.3、驗(yàn)證用戶(hù)輸入郵箱是否合法

 

 

4.4、字符串匹配

 

 

 

4.5、字符串切割

 

/*切割*/import java.util.regex.*;class RegexDemo2 {    public static void main(String[] args)     {        split_Fun();        System.out.println("================");        split_Fun2();        System.out.println("================");        split_Fun3();        System.out.println("================");        split_Fun4();        System.out.println("================");        split_Fun5();            }    /*    按空格切割    */    public static void split_Fun()    {        String str="zhangsan  lisi      wangwu     zhaoliu";        String reg="http://s+";///s表示空白字符也可以" +"表示        String [] arr=str.split(reg);        //長(zhǎng)度        System.out.println("長(zhǎng)度"+arr.length);        for(String s:arr)        {            System.out.println(s);        }    }    /*    按一個(gè)元素多次重復(fù)出現(xiàn)切割    */    public static void split_Fun2()    {        String str="zhangsan.lisi..wangwu...zhaoliu";        String reg="http://.+";        String [] arr=str.split(reg);        //長(zhǎng)度        System.out.println("長(zhǎng)度"+arr.length);        for(String s:arr)        {            System.out.println(s);        }    }    /*    雙反斜杠////    */    public static void split_Fun3()    {        String str="c://abc//a.txt";        String reg="http:////+";        String [] arr=str.split(reg);        //長(zhǎng)度        System.out.println("長(zhǎng)度"+arr.length);        for(String s:arr)        {            System.out.println(s);        }    }    /*    按照疊詞來(lái)切割    為了可以讓規(guī)則被重用可以將規(guī)則封裝為一個(gè)組    用()完成,組的出現(xiàn)都有編號(hào)    從1開(kāi)始,想要使用已經(jīng)有的組可以通過(guò)/n的形式來(lái)獲取    n就是組的編號(hào)    */    public static void split_Fun4()    {        String str="erkktyqquioppdffyphhct";        //按照疊詞來(lái)切割        String reg="(.)//1";  //(.)表示組,/1捕獲組,        String [] arr=str.split(reg);        //長(zhǎng)度        System.out.println("長(zhǎng)度"+arr.length);        for(String s:arr)        {            System.out.println(s);        }    }    /*    按重復(fù)元素切割    */    public static void split_Fun5()    {        String str="helloaaworkldbbbuiopccc";        //按照疊詞來(lái)切割        String reg="(.)//1+";  //(.)表示組,/1捕獲組,        String [] arr=str.split(reg);        //長(zhǎng)度        System.out.println("長(zhǎng)度"+arr.length);        for(String s:arr)        {            System.out.println(s);        }    }    }

 

4.6、替換

 

 

4.7、獲取

 

 

4.8、示例

 

 

 

4.9、替換,切割

 

/*192.168.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30還按照字符串自然順序,只要讓它們每一段都 是3位即可。1.按照每一段需要的最多的0進(jìn)行補(bǔ)齊,那么每一段就會(huì)至少保證3位2.將每一段只保留3位。這位的所有的ip地址都每一段3位*/import java.util.*;import java.util.regex.*;class  RegexText2{    public static void main(String[] args)     {        String ip="192.168.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";                //為每一段數(shù)字前加2個(gè)0        ip=ip.replaceAll("(//d+)","00$1");        System.out.println(ip);        /*00192.00168.001.00254 00102.0049.0023.00013 0010.0010.0010.0010 002.002.002.002            008.00109.0090.0030 */            //再次替換        ip=ip.replaceAll("0*(//d{3})","$1");        System.out.println(ip);        //192.168.001.254 102.049.023.013 010.010.010.010 002.002.002.002 008.109.090.030            //切割        String [] arr=ip.split(" +");        /*        Arrays.sort(arr);        System.out.println(Arrays.toString(arr));        */        //或者使用TreeSet        TreeSet<String> ts=new TreeSet<String>();        for(String s:arr)        {            ts.add(s);        }        //遍歷Set集合        for(String s:ts)        {    //將前置0刪除            System.out.println(s.replaceAll("0*(//d+)","$1"));        }        /*        2.2.2.2        8.109.90.30        10.10.10.10        102.49.23.13        192.168.1.254        */    }}

  

五、爬蟲(chóng)

5.1、示例

/*爬蟲(chóng)1從頁(yè)面爬郵箱*/import java.io.*;import java.util.regex.*;import java.util.*;import java.net.*;class  RegexTest1{    public static void main(String[] args) throws Exception    {                List<String> list=getMail();        for(String s:list)        {            System.out.println(s);        }    }    public static List<String> getMail() throws Exception    {            //從指定網(wǎng)址http://www.hao123.com/        String uaddr="http://www.hao123.com/";        //轉(zhuǎn)換為URL對(duì)象        URL url=new URL(uaddr);        //獲取URLConnection對(duì)象,并連接,再獲取流        //openStream(),就是openConnection().getInputStream()是個(gè)字節(jié)流        //封裝為字符緩沖流        BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream()));        //郵箱正則        String reg="http://w+@//w+(//.//w+)+";        //獲取封裝對(duì)象        Pattern p=Pattern.compile(reg);         List<String> list = new ArrayList<String>();        //開(kāi)始讀取流        String line=null;        while ((line=br.readLine())!=null)        {            //獲取正則校驗(yàn)對(duì)象            Matcher m=p.matcher(line);            //獲取            while (m.find())            {                //獲取組,并添加                list.add(m.group());            }        }        br.close();        //返回結(jié)果集        return list;    }}

 示例

/*網(wǎng)頁(yè)爬蟲(chóng)(蜘蛛)*/import java.io.*;import java.util.regex.*;class  RegexTest3{    public static void main(String[] args) throws Exception    {        getMail();    }    public static void getMail() throws Exception     {        BufferedReader br=new BufferedReader(new FileReader("d://mail.txt"));        String mailReg="http://w+@//w+(//.//w+)+";        Pattern p=Pattern.compile(mailReg);        String line=null;        while ((line=br.readLine())!=null)        {                Matcher m=p.matcher(line);            while (m.find())            {                System.out.println(m.group());            }        }    }}/*fdsfadsafdsfdsfsdf> abc@sina.com<fdslfdsfdsf;dsjfsdjffdsfadsafdsfdsfsdf> fdsfads@sina.com<fdslfdsfdsf;dsjfsdjffdsfadsafdsfdsfsdf> fdsaf@qq.com<fdslfdsfdsf;dsjfsdjfafdsaffadsfadfssafdsdfdsfsdf> abc@sina.com<fdslfdsfdsf;dsjfsdjfffdsfadsafdsffdsfsdf> abc@163.com<fdslfdsfdsf;dsjfsdjfsafdsfadsafdssffdsfsdf> abc@sina.com<fdslfdsfdsf;dsjfsdjfdsfdsfadsafdsfdsfsdf> fdsafdsc@sina.com<fdslfdsfdsf;dsjfsdjffafdfdsfadsafdsfdsfsdf> weweq@sina.com<fdslfdsfdsf;dsjfsdjffdsa>abc@sina.com<fdslfdsfdsf;dsjfsdjffdsfadsafdsfdsfsdf> adsdsafdsc@sina.com<fdslfdsfdsf;dsjfsdjfsafdsfadsafdsfdsfsdf> abc@sina.com<fdslfdsfdsf;dsjfsdjfdsafdfdsfadsafdsfdsfsdf> abc@sina.com;fdslfdsfdsf;dsjfsdjfffdsfdsfadsafdsfdsfsdf> abc@sina.com <fdslfdsfdsf;dsjfsdjfdsdsasaffdsfadsafdsfdsfsdf> abc@sina.com <fdslfdsfdsf;dsjfsdjf*/

 


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴城市| 迁西县| 招远市| 庄河市| 原平市| 福海县| 吉木萨尔县| 永德县| 剑阁县| 西乌| 黄陵县| 读书| 克什克腾旗| 天祝| 庆城县| 怀来县| 尚义县| 桂平市| 乐安县| 肃宁县| 唐河县| 乐都县| 崇仁县| 阆中市| 延庆县| 丰台区| 辛集市| 读书| 徐水县| 托里县| 平昌县| 淮北市| 连城县| 吉首市| 莱芜市| 南投县| 奉新县| 那坡县| 大关县| 北京市| 尚义县|