亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java正則多字符串匹配替換

 更新時間:2013年02月20日 19:23:54   作者:  
正則表達式異常強大,一直理解不深,用的也不深,這次項目中嘗試,體會到了它的強大之處。字符串查找,匹配,替換,正則無不能做,特別是靈活的運用子串匹配得到的變量值$1,$2,再進行二次處理能夠達到很巧妙的效果。

Java中使用也比較簡單:
1. 編譯正則表達式的字面值得到對應的模式Pattern對象;

2. 創(chuàng)建匹配給定輸入與此模式的匹配器Matcher;

3. 通過匹配器對象執(zhí)行操作,匹配器對象的方法很豐富,方法之間組合使用更加強大。

復制代碼 代碼如下:

public static void main(String[] args) {
    //被替換關鍵字的的數(shù)據(jù)源
    Map<String,String> tokens = new HashMap<String,String>();
    tokens.put("cat", "Garfield");
    tokens.put("beverage", "coffee");

    //匹配類似velocity規(guī)則的字符串
    String template = "${cat} really needs some ${beverage}.";
    //生成匹配模式的正則表達式
    String patternString = "\\$\\{(" + StringUtils.join(tokens.keySet(), "|") + ")\\}";

    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher(template);

    //兩個方法:appendReplacement, appendTail
    StringBuffer sb = new StringBuffer();
    while(matcher.find()) {
        matcher.appendReplacement(sb, tokens.get(matcher.group(1)));
    }
    matcher.appendTail(sb);

    //out: Garfield really needs some coffee.
    System.out.println(sb.toString());

    //對于特殊含義字符"\","$",使用Matcher.quoteReplacement消除特殊意義
    matcher.reset();
    //out: cat really needs some beverage.
    System.out.println(matcher.replaceAll("$1"));
    //out: $1 really needs some $1.
    System.out.println(matcher.replaceAll(Matcher.quoteReplacement("$1")));

    //到得郵箱的前綴名。插一句,其實驗證郵箱的正則多種多樣,根據(jù)自己的需求寫對應的正則才是王道
    String emailPattern = "^([a-z0-9_\\.\\-\\+]+)@([\\da-z\\.\\-]+)\\.([a-z\\.]{2,6})$";
    pattern = Pattern.compile(emailPattern);
    matcher = pattern.matcher("test@qq.com");
    //驗證是否郵箱
    System.out.println(matcher.find());
    //得到@符號前的郵箱名  out: test
    System.out.println(matcher.replaceAll("$1"));

    //獲得匹配值
    String temp = "<meta-data android:name=\"appid\" android:value=\"joy\"></meta-data>";
    pattern = Pattern.compile("android:(name|value)=\"(.+?)\"");
    matcher = pattern.matcher(temp);
    while(matcher.find()) {
        //out: appid, joy
        System.out.println(matcher.group(2));
    }
}


一些老是忘基礎


[...] 位于括號之內的任意字符

[^...] 不在括號之中的任意字符

. 除了換行符之外的任意字符,等價于[^\n]

\w 任何單字字符, 等價于[a-zA-Z0-9]

\W 任何非單字字符,等價于[^a-zA-Z0-9]

\s 任何空白符,等價于[\ t \ n \ r \ f \ v]

\S 任何非空白符,等價于[^\ t \ n \ r \ f \ v]

\d 任何數(shù)字,等價于[0-9]

\D 除了數(shù)字之外的任何字符,等價于[^0-9]

[\b] 一個退格直接量(特例)

 

{n, m} 匹配前一項至少n次,但是不能超過m次

{n, } 匹配前一項n次,或者多次

{n} 匹配前一項恰好n次

? 匹配前一項0次或1次,也就是說前一項是可選的. 等價于 {0, 1}

+ 匹配前一項1次或多次,等價于{1,}

* 匹配前一項0次或多次.等價于{0,}

 

| 選擇.匹配的要么是該符號左邊的子表達式,要么它右邊的子表達式

(...) 分組.將幾個項目分為一個單元.這個單元可由 *、+、?和|等符號使用,而且還可以記住和這個組匹配的字符以供此后引用使用

\n 和第n個分組所匹配的字符相匹配.分組是括號中的子表達式(可能是嵌套的).分組號是從左到右計數(shù)的左括號數(shù)

 

^ 匹配的是字符的開頭,在多行檢索中,匹配的是一行的開頭

$ 匹配的是字符的結尾,在多行檢索中,匹配的是一行的結尾

\b 匹配的是一個詞語的邊界.簡而言之就是位于字符\w 和 \w之間的位置(注意:[\b]匹配的是退格符)

\B 匹配的是非詞語的邊界的字符


題外話


郵箱驗證,以前驗證郵箱,網(wǎng)上搜個正則裝在自己程序里面就用,其實這是不對的,不同的公司對郵箱的驗證格式是不一樣的,比方說163和qq郵箱注冊,他們要求的格式都不一樣,所以搜一個正則表達式就去套所有的郵箱格式也是不對的,符合自己的需求的正則才是正確的。

相關文章

  • 深入聊聊Java內存泄露問題

    深入聊聊Java內存泄露問題

    所謂內存泄露就是指一個不再被程序使用的對象或變量一直被占據(jù)在內存中,下面這篇文章主要給大家介紹了關于Java內存泄露問題的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • java實現(xiàn)簡單的webservice方式

    java實現(xiàn)簡單的webservice方式

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單的webservice方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Nacos的單機模式啟動失敗問題及解決

    Nacos的單機模式啟動失敗問題及解決

    這篇文章主要介紹了Nacos的單機模式啟動失敗問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 深入了解Java I/O 之File類

    深入了解Java I/O 之File類

    這篇文章主要介紹了Java I/O深入學習之File和RandomAccessFile, I/O系統(tǒng)即輸入/輸出系統(tǒng),對于一門程序語言來說,創(chuàng)建一個好的輸入/輸出系統(tǒng)并非易事。需要的朋友可以參考下
    2021-08-08
  • spring boot和spring cloud之間的版本關系

    spring boot和spring cloud之間的版本關系

    這篇文章主要介紹了spring boot和spring cloud之間的版本關系,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • SpringCloud的Eureka模塊詳解

    SpringCloud的Eureka模塊詳解

    這篇文章主要介紹了SpringCloud的Eureka模塊詳解,Spring Cloud 封裝了 Netflix 公司開發(fā)的 Eureka 模塊來實現(xiàn)服務治理,就是提供了微服務架構中各微服務實例的快速上線或下線且保持各服務能正常通信的能力的方案總稱,需要的朋友可以參考下
    2023-07-07
  • java迭代器中刪除元素的實例操作詳解

    java迭代器中刪除元素的實例操作詳解

    在本篇內容里小編給各位分享了一篇關于java迭代器中刪除元素的實例操作詳解內容,有興趣的朋友們可以學習下。
    2021-01-01
  • Java基礎之Integer使用的注意事項及面試題

    Java基礎之Integer使用的注意事項及面試題

    這篇文章主要給大家介紹了關于Java基礎之Integer使用注意事項及面試題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-12-12
  • Java用?Gradle配置compile及implementation和api的區(qū)別

    Java用?Gradle配置compile及implementation和api的區(qū)別

    這篇文章主要介紹了Java用Gradle配置compile及implementation和api的區(qū)別,文章圍繞主題的相關資料展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • MyBatis更新時新值為null時,updateById()更新失敗問題

    MyBatis更新時新值為null時,updateById()更新失敗問題

    這篇文章主要介紹了MyBatis更新時新值為null時,updateById()更新失敗問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評論