正則表達式兩三事

總結幾個正則表達式平時使用過程當中表的疑惑點,總結結果以下:正則表達式

1. 正則表達式爲何須要兩個 \. 來表示.或者正則表達式中爲何\須要四個\來表示\\

\.(jpg|png|bmp|gif) 上面這個正則表達式爲何有兩個反斜槓呢?反斜槓點.就能表示點.了,爲何還要在.前面多加一個\?bash

答案:這要分兩步看 首先字符串中的\被編譯器解釋爲
而後做爲正則表達式,.又被正則表達式引擎解釋爲.測試

若是在字符串裏只寫.的話,第一步就被直接解釋爲.,以後做爲正則表達式被解釋時就變成匹配任意字符了spa

2.Java正則Matcher類的matches()、lookAt()和find()的區別?

網上相似的博客不少,可是看他們的說法實驗結果各異,因而我本身測了一把,得出以下結論。code

在Matcher類中有matches、lookingAt和find都是匹配目標的方法,但容易混淆,整理它們的區別以下:對象

  • matches: 整個匹配,只有整個字符序列徹底匹配成功,才返回True,不然返回False。但若是前部分匹配成功,將移動下次匹配的位置。
  • lookingAt: 部分匹配,老是從第一個字符進行匹配,匹配成功了再也不繼續匹配,匹配失敗了,也不繼續匹配。
  • find: 部分匹配,從當前位置開始匹配,找到一個匹配的子串,將移動下次匹配的位置。
  • reset: 給當前的Matcher對象配上個新的目標,目標是就該方法的參數;若是不給參數,reset會把Matcher設到當前字符串的開始處。

測試代碼:字符串

private void regexTest(){
        Pattern pattern = Pattern.compile("\\d{3,5}");
        String charSequence = "123-34345-234-00";
        Matcher matcher = pattern.matcher(charSequence);

        //雖然匹配失敗,但因爲charSequence裏面的"123"和pattern是匹配的,因此下次的匹配從位置4開始
        Log.e("regex",""+matcher.matches());
        //測試匹配位置
        matcher.find();
        Log.e("regex",""+matcher.start());

        //使用reset方法重置匹配位置
        matcher.reset();

        //第一次find匹配以及匹配的目標和匹配的起始位置
        Log.e("regex",""+matcher.find());
        Log.e("regex",""+matcher.group()+" - "+matcher.start());
        //第二次find匹配以及匹配的目標和匹配的起始位置
        Log.e("regex",""+matcher.find());
        Log.e("regex",""+matcher.group()+" - "+matcher.start());

        //第一次lookingAt匹配以及匹配的目標和匹配的起始位置
        Log.e("regex",""+matcher.lookingAt());
        Log.e("regex",""+matcher.group()+" - "+matcher.start());

        //第二次lookingAt匹配以及匹配的目標和匹配的起始位置
        Log.e("regex",""+matcher.lookingAt());
        Log.e("regex",""+matcher.group()+" - "+matcher.start());

        //使用reset方法重置匹配位置
        matcher.reset();
        //遍歷全部匹配的子串
        while(matcher.find()){
            Log.e("regex",""+matcher.group()+" - "+matcher.start());
        }

    }
複製代碼

測試結果:編譯器

2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: false
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: 0
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: true
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: 123 - 0
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: true
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: 34345 - 4
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: true
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: 123 - 0
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: true
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: 123 - 0
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: 123 - 0
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: 34345 - 4
2018-12-28 14:55:40.675 15023-15023/com.kdgw.weifeng.runnumber E/regex: 234 - 10

複製代碼
相關文章
相關標籤/搜索