国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java 正則表達(dá)式

forrest23 / 2263人閱讀

摘要:正則表達(dá)式是一個(gè)強(qiáng)大的字符串處理工具,可以對字符串進(jìn)行查找提取分隔替換等操作。例如,正則表達(dá)式用于匹配的三個(gè)訪問控制符其中之一邊界匹配符數(shù)量標(biāo)識符貪婪模式數(shù)量表示符默認(rèn)采用貪婪模式。方法以空格為分隔符,將字符串分割成多個(gè)子串哈哈

正則表達(dá)式是一個(gè)強(qiáng)大的字符串處理工具,可以對字符串進(jìn)行查找、提取、分隔、替換等操作。String類里提供了如下幾個(gè)特殊方法

boolean matches(String regex):判斷該字符串是否匹配指定的正則表達(dá)式

String replaceAll(String regex, String replacement):將該字符串中所有匹配regex的子串替換成replacement

String replaceFirst(String regex, String replacement):將該字符串中第一個(gè)匹配regex的子串替換成replacement

String[] split(String regex):以regex為分隔符,把該字符串分割成多個(gè)子串

創(chuàng)建正則表達(dá)式

正則表達(dá)式是用于匹配字符串的模板,可以匹配一批字符串,所以創(chuàng)建正則表達(dá)式就是創(chuàng)建一個(gè)特殊的字符串

正則表達(dá)式所支持的合法字符
字符 解釋
x 字符x
0mnn 八進(jìn)制數(shù)0mnn所表達(dá)的字符
xhh 十六進(jìn)制數(shù)0xhh所表達(dá)的字符
uhhhh 十六進(jìn)制數(shù)0xhhhh所表達(dá)的Unicode字符
t 制表符("u0009)
n 新行(換行)符("u000A)
r 回車符("u000D)
f 換頁符("u000C)
a 報(bào)警(bell)符("u0007)
e Escape符("u001B)
cx x對應(yīng)的控制符。cM匹配Ctrl-M,x必須為A~Z或a~z
正則表達(dá)式中的特殊字符

預(yù)定義字符

正則表達(dá)式中的“通配符”遠(yuǎn)遠(yuǎn)超出了普通通配符的功能,被稱為預(yù)定義字符。

方括號表達(dá)式

圓括號表達(dá)式

用于將多個(gè)表達(dá)式組成一個(gè)子表達(dá)式,圓括號中可以使用或運(yùn)算符(|)。例如,正則表達(dá)式"((public)|(protected)|(prvate))"用于匹配Java的三個(gè)訪問控制符其中之一

邊界匹配符

數(shù)量標(biāo)識符

Greedy(貪婪模式):數(shù)量表示符默認(rèn)采用貪婪模式。貪婪模式的表達(dá)式會(huì)一直匹配下去,直到無法匹配

Reluctant(勉強(qiáng)模式):用問號后綴(?)表示,只會(huì)匹配最少的字符,也稱為最小匹配模式

Possessive(占有模式):用加號后綴(+)表示,目前只有Java支持占有模式,通常較少使用

貪婪模式和勉強(qiáng)模式的對比:

String str = "SSR! 大天狗";
//貪婪模式的正則表達(dá)式
System.out.println(str.replaceFirst("w*","□"));
//勉強(qiáng)模式的正則表達(dá)式
System.out.println(str.replaceFirst("w*?","□"));

"w"使用了貪婪模式,數(shù)量表示符()會(huì)一直匹配下去,所以該字符串前面的所有單詞 字符都被它匹配到,直到遇到空格,所以替換后的效果是“□! 大天狗”;如果使用勉強(qiáng)模式,數(shù)量表示符(*)會(huì)盡量匹配最少字符,即匹配0個(gè)字符,所以替換后的結(jié)果是“□SSR! 大天狗”。

使用正則表達(dá)式

Pattern對象是正則表達(dá)式編譯后在內(nèi)存中的表示形式,因此,正則表達(dá)式字符串必須先被編譯為Pattern對象,然后再利用該P(yáng)attern對象創(chuàng)建對應(yīng)的Matcher對象。執(zhí)行匹配所涉及的狀態(tài)保留在Matcher對象中,多個(gè)Matcher對象可共享同一個(gè)Pattern對象。

典型調(diào)用順序

//將一個(gè)字符串編譯成Pattern對象
Pattern pattern = Pattern.compile("a*b");
//使用Pattern對象創(chuàng)建Matcher對象
Matcher matcher = pattern.matcher("aaaaab");
boolean b = matcher.matches();        //返回true

上面定義的Pattern對象可以多次重復(fù)使用。如果僅需一次使用,則可直接使用Pattern類的靜態(tài)matches()方法,此方法自動(dòng)把指定字符串編譯成匿名的Pattern對象,并執(zhí)行匹配

boolean b = pattern.matches("a*b", "aaaaab");        //返回true

上面語句等效于前面的三條語句,但采用這種語句每次都需要重新編譯新的Pattern對象,不能重新利用已編譯的Pattern對象,所以效率不高

Pattern是不可變類,可供多個(gè)并發(fā)線程安全使用

Matcher類提供的常用方法:

find():返回目標(biāo)字符串中是否包含與Pattern匹配的子串

group():返回上一次與Pattern匹配的子串

start():返回上一次與Pattern匹配的子串在目標(biāo)字符串中的開始位置

end():返回上一次與Pattern匹配的子串在目標(biāo)字符串中結(jié)束位置加1

lookingAt():返回目標(biāo)字符串前面部分與Pattern是否匹配

matches():返回整個(gè)目標(biāo)字符串與Pattern是否匹配

reset():將現(xiàn)有的Matcher對象應(yīng)用于一個(gè)新的字符序列

CharSequence接口,該接口代表一個(gè)字符序列,其中CharBuffer、String、StringBuffer、StringBuilder都是它的實(shí)現(xiàn)類。

通過Matcher()類的find()和group()方法從目標(biāo)字符串中依次取出特定子串(匹配正則表達(dá)式的子串)

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FindGroup 
{
    public static void main(String[] args) 
    {
        //使用字符串模擬從網(wǎng)絡(luò)上得到的網(wǎng)頁源碼
        String string = "四洲休閑食品:0754-88117038" + 
        "清風(fēng)牌面巾紙:8008282272" + "統(tǒng)一冰紅茶:4007000660";
        //創(chuàng)建一個(gè)Pattern對象,并用它建立一個(gè)Matcher對象
        //該正則表達(dá)式只抓取400X和800X段的電話號碼
        //實(shí)際要抓取哪些電話號碼,只要修改正則表達(dá)式即可
        Matcher matcher = Pattern.compile("((400d)|(800d))d{6}").matcher(string);
        //將所有符合正則表達(dá)式的子串(電話號碼)全部輸出
        while (matcher.find()) 
        {
            System.out.println(matcher.group());
        }
    }
}

find()方法還可以傳入一個(gè)int類型的參數(shù),帶int參數(shù)的find()方法將從該int索引處向下搜索。start()和end()方法主要用于確定子串在目標(biāo)字符串中的位置

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StartEnd 
{
    public static void main(String[] args) 
    {
        //創(chuàng)建一個(gè)Pattern對象,并用它建立一個(gè)Matcher對象
        String regStr = "France LoireAtlantique Bretagne Nantes";
        System.out.println("目標(biāo)字符串是:" + regStr);
        Matcher matcher = Pattern.compile("w+").matcher(regStr);
        while (matcher.find()) 
        {
            System.out.println(matcher.group() + 
                    "子串的起始位置:" + matcher.start() +
                    ",其結(jié)束位置:" + matcher.end());
        }
    }
}
目標(biāo)字符串是:France LoireAtlantique Bretagne Nantes
France子串的起始位置:0,其結(jié)束位置:6
LoireAtlantique子串的起始位置:7,其結(jié)束位置:22
Bretagne子串的起始位置:23,其結(jié)束位置:31
Nantes子串的起始位置:32,其結(jié)束位置:38

程序創(chuàng)建一個(gè)郵件地址Pattern,再將其與多個(gè)郵寄地址進(jìn)行匹配。當(dāng)程序中的Matcher為null時(shí),程序調(diào)用matcher()方法來創(chuàng)建一個(gè)Matcher對象,一旦Matcher對象被創(chuàng)建,程序就調(diào)用Matcher的reset()方法將該Matcher應(yīng)用于新的字符序列

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MatchesTest 
{
    public static void main(String[] args) 
    {
        String[] mails =
            {
                    "LeBornJames@gmail.com",
                    "FlashWade@163.com",
                    "Bosh@yahoo.com"
            };
        String mailRegEx = "w{3,20}@w+.(com|org|cn|net|gov|ed)";
        Pattern mailPattern = Pattern.compile(mailRegEx);
        Matcher matcher = null;
        for (String mail : mails) 
        {
            if (matcher == null) 
            {
                matcher = mailPattern.matcher(mail);
            }
            else 
            {
                matcher.reset();
            }
            String result = mail + (matcher.matches() ? "是":"不是") + "一個(gè)有效郵件地址";
            System.out.println(result);
        }
    }
}

Matcher類提供的replaceAll()把字符串中所有與正則表達(dá)式的子串替換成:"呵呵"。還提供replaceFirst(),該方法只替換第一匹配的子串。split()方法以空格為分隔符,將字符串分割成多個(gè)子串

public class StringReg
{
    public static void main(String[] args)
    {
        String[] msgs =
        {
            "Java has regular expressions in 1.4",
            "regular expressions now expressing in Java",
            "Java represses oracular expressions"
        };
        for (String msg : msgs)
        {
        System.out.println(msg.replaceFirst("rew*" , "哈哈:)"));
        System.out.println(Arrays.toString(msg.split(" ")));
        }
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/66364.html

相關(guān)文章

  • JavaScript中的正則達(dá)式

    Javascript的正則表達(dá)式是前端中比較重要的部分,正則表達(dá)式主要用于字符串處理,表單驗(yàn)證等場合,實(shí)用高效,文章主要對JavaScript中的正則的學(xué)習(xí)與總結(jié) 正則表達(dá)式的定義 正則表達(dá)式:是一個(gè)描述字符模式的對象,JavaScrip中正則表達(dá)式用RegExp對象表示,可以使用RegExp構(gòu)造函數(shù)來創(chuàng)建正則對象 正則表達(dá)式的創(chuàng)建 1.字面量創(chuàng)建 var reg = /[a-z]/; 2.構(gòu)...

    _Zhao 評論0 收藏0
  • JavaScript 中的正則達(dá)式

    摘要:正則表達(dá)式的意義中的正則表達(dá)式使用表示,可以使用構(gòu)造函數(shù)來創(chuàng)建對象,不過對象更多的是通過一種特殊的直接量語法來創(chuàng)建。用構(gòu)造函數(shù)也可以定義一個(gè)與之等價(jià)的正則表達(dá)式,代碼如下正則表達(dá)式的模式規(guī)則是由一個(gè)字符序列組成的。 正則表達(dá)式的模式匹配 正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對象。javascript的RegExp對象表示正則表達(dá)式,String和Reg...

    _Dreams 評論0 收藏0
  • 正則達(dá)式 深入淺出2--從java API開始

    摘要:正則表達(dá)式等待匹配的字符這里可以輸入任何繼承了的類返回一個(gè)值說明是否匹配這里需要注意的是,和均不允許通過構(gòu)造器新建一個(gè)對象。 前言 之前一直想要做一個(gè)自己的爬蟲,然后從nba數(shù)據(jù)相關(guān)的網(wǎng)上【虎撲,騰訊,官網(wǎng)等,要視網(wǎng)站是否支持】爬點(diǎn)數(shù)據(jù)寫數(shù)據(jù)分析和圖形化展示。雖然年輕的時(shí)候就實(shí)現(xiàn)過這個(gè)功能,但是當(dāng)時(shí)直接借用了一個(gè)網(wǎng)上現(xiàn)成的jar包,然后在那個(gè)基礎(chǔ)上寫了一個(gè)非常簡陋的正則表達(dá)式來提取數(shù)據(jù)...

    andycall 評論0 收藏0
  • JavaScript正則達(dá)式的匹配模式

    摘要:選擇分組和引用正則表達(dá)式的語法還包括指定選擇項(xiàng)子表達(dá)式分組和引用前一子表達(dá)式的特殊字符。帶圓括號的表達(dá)式的另一個(gè)用途是允許在同一正則表達(dá)式的后部引用前面的子表達(dá)式。 正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對象。JavaScript的 RegExp類 表示正則表達(dá)式,String和RegExp都定義了方法,后者使用正則表達(dá)式進(jìn) 行強(qiáng)大的模式匹配和文本檢索與...

    wqj97 評論0 收藏0
  • 【愣錘筆記】一支穿云箭、正則來相見

    摘要:表示進(jìn)行多行匹配。如果正則表達(dá)式中含有子表達(dá)式,那么該數(shù)組后續(xù)的項(xiàng)依次為匹配到的第一個(gè)子表達(dá)式的匹配結(jié)果,第二個(gè)第個(gè)。關(guān)于正則方法有一點(diǎn)必須要提,很容易導(dǎo)致錯(cuò)誤的情況。這時(shí)候直接使用該正則表達(dá)式對進(jìn)行方法調(diào)用,卻返回了。匹配前一項(xiàng)至少次。有人說,一行正則抵得上100行代碼……正則表達(dá)式,每門語言都有,在我們的js開發(fā)中,最常見的使用場景:一是表單驗(yàn)證,像是登錄注冊啊,用戶輸入檢測啊,不管在前...

    wangbjun 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<