麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > regex > 正文

Java正則相關(guān)的Pattern和Matcher類及遇到的坑

2020-01-20 21:33:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

此篇文章是記錄我在學(xué)習(xí)Java正則表達(dá)式時(shí)候?qū)W到的和遇到的坑。

先來(lái)說說 Matcher 里面的三個(gè)方法(取的結(jié)果以group()方法為例子)

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

好了上測(cè)試代碼:

package com.wjj.utils;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** @author 作者 : 榨菜哥* @version 創(chuàng)建時(shí)間:2016年8月18日 上午8:47:58* 類說明:正則表達(dá)式的練習(xí)*/public class Regex {  //find方法測(cè)試  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方法測(cè)試  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方法測(cè)試  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方法測(cè)試    find("a123b");    //matches方法測(cè)試    matches("a123");    //lookingAt方法測(cè)試    lookingAt("a123b");  }}

輸出結(jié)果:

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

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

以上是個(gè)人學(xué)習(xí)的理解,有不對(duì)之處,希望給予指點(diǎn)。

(補(bǔ)充:正則表達(dá)式Pattern如果調(diào)用多次容易出問題,比如內(nèi)存溢出,因?yàn)镻attern每執(zhí)行一次就編譯一次正則表達(dá)式,因此建議將需要的正則表達(dá)式進(jìn)行預(yù)編譯。)

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

總結(jié)

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人区精品一区二区婷婷 | 成人在线视频国产 | 亚洲成人在线免费 | 欧美激情天堂 | 在线观看av国产一区二区 | 国产成人精品免费视频大全办公室 | 国产成人精品免费视频大全最热 | 中文字幕四区 | 狠狠干最新网址 | a网在线| 黄色二区三区 | 国产成人精品区一区二区不卡 | 在线 日本 制服 中文 欧美 | 激情视频免费观看 | 中文字幕在线观看成人 | 视频一区二区三区中文字幕 | 久久精品国产一区二区 | 91丝袜 | 久久久噜噜噜久久熟有声小说 | 一分钟免费观看完整版电影 | 色网站免费观看 | 国产91精品亚洲精品日韩已满 | 日韩视频在线不卡 | 欧美日韩免费一区 | 哪里可以看免费的av | 青久草视频 | www.777含羞草 | 成片免费大全 | 精品一区二区在线观看视频 | 噜噜社| 精品不卡| 正在播放91视频 | 九九精品在线观看 | 国产在线精品91 | 麻豆视频在线观看免费网站 | 免费一级毛片免费播放 | 91短视频网址 | 精品国产一区二区三区久久久蜜 | 国产1区2区在线 | 视频一区国产精品 | 国产自91精品一区二区 |