a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > regex > 正文

Java正則相關的Pattern和Matcher類及遇到的坑

2020-01-20 21:33:46
字體:
來源:轉載
供稿:網友

此篇文章是記錄我在學習Java正則表達式時候學到的和遇到的坑。

先來說說 Matcher 里面的三個方法(取的結果以group()方法為例子)

  • matches():整個匹配,只有整個字符序列完全匹配成功,才返回True,否則返回False。但如果前部分匹配成功,將移動下次匹配的位置。舉個例子如果字符串為"a123",正則表達式為"/w/d/d/d",則matches()方法才返回true,換言之,就是要匹配的字符串需要跟正則表達式一一對應,字母對應字母,數字對應數字,所以稱之為完全匹配,錯一位都不行。(這里的理解花了我好長時間,網上搜到的都沒有提及,也許是我理解能力不夠)
  • find():部分匹配,從當前位置開始匹配,找到一個匹配的子串,將移動下次匹配的位置。“find()像迭代器那樣向前遍歷輸入字符串。” --摘自《Java編程思想。看下面的例子中的find()方法,要匹配的字符串為"a123b",正則表達式為"/d/d/d",而最后輸出結果為:123,所以稱之為部分匹配,只要有,就返回true。
  • lookingAt():部分匹配,總是從第一個字符進行匹配,匹配成功了不再繼續匹配,匹配失敗了,也不繼續匹配。lookingAt()方法介于matches()和find()方法之間。lookingAt()方法的部分匹配指從第一位開始匹配如果第一位沒有匹配到,就不再匹配,直接返回false,如果第一位匹配到了,則匹配第二位,以此類推。例子:要匹配的字符串為"a123b",正則表達式為"/w/d/d",輸出結果為"a12",很好理解,就是一位一位地匹配,匹配到了就匹配下一位。"/w/d/d"這個正則正好代表"字母數字數字",所以正好輸出結果為a12。

好了上測試代碼:

package com.wjj.utils;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** @author 作者 : 榨菜哥* @version 創建時間:2016年8月18日 上午8:47:58* 類說明:正則表達式的練習*/public class Regex {  //find方法測試  public static void find(String html) {    String regex = "http://d//d//d";    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);    Matcher matcher = pattern.matcher(html);    System.out.print("find():");    if (matcher.find()) {      System.out.println(matcher.group());    }  }  //matches方法測試  public static void matches(String html) {    String regex = "^//w//d//d//d";    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);    Matcher matcher = pattern.matcher(html);    System.out.print("matches():");    if (matcher.matches()) {      System.out.println(matcher.group());    }  }  //lookingAt方法測試  public static void lookingAt(String html) {    String regex = "http://w//d//d";    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);    Matcher matcher = pattern.matcher(html);    System.out.print("lookingAt():");    if (matcher.lookingAt()) {      System.out.println(matcher.group());    }  }  public static void main(String[] args) {    //find方法測試    find("a123b");    //matches方法測試    matches("a123");    //lookingAt方法測試    lookingAt("a123b");  }}

輸出結果:

    find():123
    matches():a123
    lookingAt():a12

小結:正則表達式本身并不難,平常使用的時候只要按照規則來寫就好了。在學習中理解matches、find、和lookingAt三個方法花了我比較長的時間,一直不能理解完全匹配和部分匹配是什么意思,最后還是在stackoverflow上找到了想要的答案。

以上是個人學習的理解,有不對之處,希望給予指點。

(補充:正則表達式Pattern如果調用多次容易出問題,比如內存溢出,因為Pattern每執行一次就編譯一次正則表達式,因此建議將需要的正則表達式進行預編譯。)

正則表達式學習教程: http://deerchao.net/tutorials/regex/regex.htm ,文中作者寫得挺詳細的,并且通俗易懂。

總結

以上所述是小編給大家介紹的Java正則相關的Pattern和Matcher類及遇到的坑,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产区福利 | 欧美一区2区三区4区公司贰佰 | 三级视频网站 | 亚洲免费小视频 | 在线成人免费视频 | 青青久久网 | 亚洲精品久久久久久久久久久久久 | 日本xxxxxxx| 日本黄色一级片免费看 | 一区网站 | 亚洲人成在线观看 | 精品国产一区二区三区av小说 | 91久久人人夜色一区二区 | 欧美日韩午夜精品 | 欧美一级在线 | 91免费版在线观看 | 日本不卡在线播放 | 成人午夜精品一区二区三区 | 国产 日韩 欧美 制服 另类 | 国产激情偷乱视频一区二区三区 | 日韩精品一区二区三区中文在线 | 亚洲欧美在线免费观看 | 成人福利网 | 日韩在线观看网站 | 日韩欧美亚洲 | 亚洲v在线 | 免费小视频| 在线视频成人 | 久久777| 亚洲精品美女 | 精品在线播放 | 在线免费观看黄av | 亚洲免费在线观看 | 美国黄色毛片女人性生活片 | 久久久婷 | 国产精品国产精品国产专区不蜜 | 欧美男人天堂 | 久久精品国产免费 | 狠狠操综合网 | 成人欧美一区二区三区在线播放 | 亚洲人成人一区二区在线观看 |