91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java正則表達式Pattern和Matcher原理詳解

發布時間:2020-08-24 16:07:14 來源:腳本之家 閱讀:154 作者:yaominghui 欄目:編程語言

這篇文章主要介紹了Java正則表達式Pattern和Matcher原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

基本使用

Scanner中的使用正則表達式

//Scanner 支持的分組
    Scanner cin=new Scanner("red a bbc").useDelimiter("\\s*a\\s*");
    System.out.println(cin.next());
    System.out.println(cin.next());out:
redbbc

等同于下面代碼

//等于 正則
Scanner cin2=new Scanner("red a bbc");
cin2.findInLine("\\s*"); // findLine 允許存在多個,match()為最終需要匹配的字符串
MatchResult result = cin2.match();
for (int i = 0; i < result.groupCount(); i++) {
  System.out.println(result.group(i));
}

Pattern:

 //基本匹配
    boolean b = Pattern.matches("a*b", "aaaab");
    System.out.println(b);

String的aplit的實現

//按照數字分割
    Pattern p=Pattern.compile("\\d+");
    String[] str=p.split("好456456像:0532214是");
    for (int i = 0; i < str.length; i++) {
      System.out.println(str[i]);

    }

一般使用Pattern.matches(String regex,CharSequence input)是一個靜態方法,用于快速匹配字符串,該方法適合用于只匹配一次,且匹配全部字符串.

Java代碼示例:

Pattern.matches("\\d+","2223");//返回true 
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,這里aa不能匹配到 
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,這里bb不能匹配到 Pattern p=Pattern.compile("\\d+"); Matcher m=p.matcher("22bb23"); m.pattern();//返回p 也就是返回該Matcher對象是由哪個Pattern對象的創建的

重點:

matches 方法嘗試將整個輸入序列與該模式匹配。

lookingAt 嘗試將輸入序列從頭開始與該模式匹配。

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

// matches()對整個字符串進行匹配,只有整個字符串都匹配了才返回true
    Pattern p=Pattern.compile("\\d+");
    Matcher m=p.matcher("22bb23");
    m.matches();//返回false,因為bb不能被\d+匹配,導致整個字符串匹配未成功.
    Matcher m2=p.matcher("2223");
    m2.matches();//返回true,因為\d+匹配到了整個字符串

    // lookingAt()對前面的字符串進行匹配,只有匹配到的字符串在最前面才返回true
    Pattern p1=Pattern.compile("\\d+");
    Matcher m3=p1.matcher("22bb23");
    m.lookingAt();//返回true,因為\d+匹配到了前面的22
    Matcher m4=p1.matcher("aa2223");
    m2.lookingAt();//返回false,因為\d+不能匹配前面的aa

    // find()對字符串進行匹配,匹配到的字符串可以在任何位置.
    Pattern p2=Pattern.compile("\\d+");
    Matcher m5=p2.matcher("22bb23");
    m.find();//返回true
    Matcher m6=p2.matcher("aa2223");
    m2.find();//返回true
    Matcher m7=p2.matcher("aa2223bb");
    m3.find();//返回true
    Matcher m8=p2.matcher("aabb");
    m4.find();//返回false

Mathcer.start()/ Matcher.end()/ Matcher.group()

當使用matches(),lookingAt(),find()執行匹配操作后,就可以利用以上三個方法得到更詳細的信息.

  • start()返回匹配到的子字符串在字符串中的索引位置.
  • end()返回匹配到的子字符串的最后一個字符在字符串中的索引位置. 即為最后位置加一
  • group()返回匹配到的子字符串

Java代碼示例:

Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("aaa2223bb"); 
m.find();//匹配2223 
m.start();//返回3 
m.end();//返回7,返回的是2223后的索引號 
m.group();//返回2223 

Mathcer m2=p.matcher("2223bb"); 
m2.lookingAt();  //匹配2223 
m2.start();  //返回0,由于lookingAt()只能匹配前面的字符串,所以當使用lookingAt()匹配時,start()方法總是返回0 
m2.end();  //返回4 
m2.group();  //返回2223 

Matcher m3=p.matcher("2223"); //如果Matcher m3=p.matcher("2223bb"); 那么下面的方法出錯,因為不匹配返回false
m3.matches();  //匹配整個字符串 
m3.start();  //返回0
m3.end();  //返回3,原因相信大家也清楚了,因為matches()需要匹配所有字符串 
m3.group();  //返回2223

說了這么多,相信大家都明白了以上幾個方法的使用,該說說正則表達式的分組在java中是怎么使用的.

start(),end(),group()均有一個重載方法它們是start(int i),end(int i),group(int i)專用于分組操作,Mathcer類還有一個groupCount()用于返回有多少組.

Java代碼示例:

Pattern p=Pattern.compile("([a-z]+)(\\d+)"); 
Matcher m=p.matcher("aaa2223bb"); 
m.find();  //匹配aaa2223 
m.groupCount();  //返回2,因為有2組 
m.start(1);  //返回0 返回第一組匹配到的子字符串在字符串中的索引號 
m.start(2);  //返回3 
m.end(1);  //返回3 返回第一組匹配到的子字符串的最后一個字符在字符串中的索引位置. 
m.end(2);  //返回7 
m.group(1);  //返回aaa,返回第一組匹配到的子字符串 
m.group(2);  //返回2223,返回第二組匹配到的子字符串

驗證手機號

// 驗證手機號
    Pattern compile = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");
    Matcher matcher1 = compile.matcher("15071089603");
    while(matcher1.find()){
      System.out.println(matcher1.group());
    }

/**
   * 驗證手機號碼
   *
   * 移動號碼段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147、182
   * 聯通號碼段:130、131、132、136、185、186、145
   * 電信號碼段:133、153、180、189、177
   *
   */
 String regex = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,1,2,5-9])|(177))\\d{8}$";

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

拉萨市| 胶南市| 合川市| 邢台县| 聊城市| 治县。| 定陶县| 饶阳县| 出国| 克拉玛依市| 清苑县| 兴安盟| 成安县| 富蕴县| 陇川县| 湖州市| 贵南县| 长沙市| 前郭尔| 诸城市| 盐城市| 郴州市| 嘉义县| 梅河口市| 灌阳县| 浑源县| 于都县| 元谋县| 财经| 林口县| 曲阜市| 和平县| 宜州市| 广元市| 县级市| 洛浦县| 六盘水市| 千阳县| 松潘县| 郓城县| 塘沽区|