最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java正則表達(dá)式易錯(cuò)知識(shí)點(diǎn)匯總

 更新時(shí)間:2015年12月14日 10:42:24   作者:leizhimin  
這篇文章主要總結(jié)Java正則表達(dá)式易錯(cuò)知識(shí),對(duì)易錯(cuò)知識(shí)點(diǎn)進(jìn)行分類整理,幫助大家更好的學(xué)習(xí)Java正則表達(dá)式,感興趣的小伙伴們可以參考一下

一、概述
正則表達(dá)式是Java處理字符串、文本的重要工具。
Java對(duì)正則表達(dá)式的處理集中在以下兩個(gè)類:
java.util.regex.Matcher   模式類用來(lái)表示一個(gè)編譯過(guò)的正則表達(dá)式。
java.util.regex.Pattern   匹配類:用模式匹配一個(gè)字符串所表達(dá)的抽象結(jié)果。
(很遺憾,Java Doc并沒(méi)有給出這兩個(gè)類的職責(zé)概念。) 
比如一個(gè)簡(jiǎn)單例子:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

/** 
* 正則表達(dá)式例子 
* 
* @author leizhimin 2009-7-17 9:02:53 
*/ 
public class TestRegx { 
    public static void main(String[] args) { 
        Pattern p = Pattern.compile("f(.+?)k"); 
        Matcher m = p.matcher("fckfkkfkf"); 
        while (m.find()) { 
            String s0 = m.group(); 
            String s1 = m.group(1); 
            System.out.println(s0 + "||" + s1); 
        } 
        System.out.println("---------"); 
        m.reset("fucking!"); 
        while (m.find()) { 
            System.out.println(m.group()); 
        } 

        Pattern p1 = Pattern.compile("f(.+?)i(.+?)h"); 
        Matcher m1 = p1.matcher("finishabigfishfrish"); 
        while (m1.find()) { 
            String s0 = m1.group(); 
            String s1 = m1.group(1); 
            String s2 = m1.group(2); 
            System.out.println(s0 + "||" + s1 + "||" + s2); 
        } 

        System.out.println("---------"); 
        Pattern p3 = Pattern.compile("(19|20)\\d\\d([- /.])(0[1-9]|1[012])\\2(0[1-9]|[12][0-9]|3[01])"); 
        Matcher m3 = p3.matcher("1900-01-01 2007/08/13 1900.01.01 1900 01 01 1900-01.01 1900 13 01 1900 02 31"); 
        while (m3.find()) { 
            System.out.println(m3.group()); 
        } 
    } 
}
 

輸出結(jié)果:
fck||c
fkk||k
---------
fuck
finish||in||s
fishfrish||ishfr||s
---------
1900-01-01
2007/08/13
1900.01.01
1900 01 01
1900 02 31

Process finished with exit code 0
 二、一些容易迷糊的問(wèn)題
 1、Java對(duì)反斜線處理的問(wèn)題 
在其他語(yǔ)言中,\\表示要插入一個(gè)字符\;
在Java語(yǔ)言中,\\表示要插入正則表達(dá)式的反斜線,并且后面的字符有特殊意義。 
a.預(yù)定義字符類
. 任何字符(與行結(jié)束符可能匹配也可能不匹配)
\d 數(shù)字:[0-9]
\D 非數(shù)字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單詞字符:[a-zA-Z_0-9]
\W 非單詞字符:[^\w]
 但是看看上面程序,對(duì)比下不難看出:
\d在實(shí)際使用的時(shí)候就寫成了 \\d;
在Java正則表達(dá)式中,如果要插入一個(gè)\字符,則需要在正則表達(dá)式中寫成\\\\,原因是下面的APIDoc定義\\表示一個(gè)反斜線。
但是如果在正則表示式中表示回車換行等,則不需要多添加反斜線了。比如回車\r就寫作\r. 
b.字符
x 字符 x
\\ 反斜線字符
\0n 帶有八進(jìn)制值 0 的字符 n (0 <= n <= 7)
\0nn 帶有八進(jìn)制值 0 的字符 nn (0 <= n <= 7)
\0mnn 帶有八進(jìn)制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh 帶有十六進(jìn)制值 0x 的字符 hh
\uhhhh 帶有十六進(jìn)制值 0x 的字符 hhhh
\t 制表符 ('\u0009')
\n 新行(換行)符 ('\u000A')
\r 回車符 ('\u000D')
\f 換頁(yè)符 ('\u000C')
\a 報(bào)警 (bell) 符 ('\u0007')
\e 轉(zhuǎn)義符 ('\u001B')
\cx 對(duì)應(yīng)于 x 的控制符
2、Matcher.find():嘗試查找與模式匹配的字符序列的下一個(gè)子序列。此方法從字符序列的開(kāi)頭開(kāi)始,如果該方法的前一次調(diào)用成功了并且從那時(shí)開(kāi)始匹配器沒(méi)有被重置,則從以前匹配操作沒(méi)有匹配的第一個(gè)字符開(kāi)始,即如果前一次找到與模式匹配的子序列則這次從這個(gè)子序列后開(kāi)始查找。
3、Matcher.matchers():判斷整個(gè)字符序列與模式是否匹配。當(dāng)連續(xù)用Matcher對(duì)象檢查多個(gè)字符串時(shí)候,可以使用
Matcher.reset():重置匹配器,放棄其所有顯式狀態(tài)信息并將其添加位置設(shè)置為零。
或者M(jìn)atcher.reset(CharSequence input)  重置此具有新輸入序列的匹配器,來(lái)重復(fù)使用匹配器。
4、組的概念,這個(gè)概念很重要,組是用括號(hào)劃分的正則表達(dá)式,可以通過(guò)編號(hào)來(lái)引用組。組號(hào)從0開(kāi)始,有幾對(duì)小括號(hào)就表示有幾個(gè)組,并且組可以嵌套,組號(hào)為0的表示整個(gè)表達(dá)式,組號(hào)為1的表示第一個(gè)組,依此類推。
例如:A(B)C(D)E正則式中有三組,組0是ABCDE,組1是B,組2是D;
A((B)C)(D)E正則式中有四組:組0是ABCDE,組1是BC,組2是B;組3是C,組4是D。 
int groupCount():返回匹配其模式中組的數(shù)目,不包括第0組。
String group():返回前一次匹配操作(如find())的第0組。
String group(int group):返回前一次匹配操作期間指定的組所匹配的子序列。如果該匹配成功,但指定組未能匹配字符序列的任何部分,則返回 null。
int start(int group):返回前一次匹配操作期間指定的組所匹配的子序列的初始索引。
int end(int group):返回前一次匹配操作期間指定的組所匹配的子序列的最后索引+1。
5、匹配的范圍的控制
最變態(tài)的就要算lookingAt()方法了,名字很讓人迷惑,需要認(rèn)真看APIDoc。 
start()  返回以前匹配的初始索引。
end()  返回最后匹配字符之后的偏移量。
public boolean lookingAt()嘗試將從區(qū)域開(kāi)頭開(kāi)始的輸入序列與該模式匹配。
與 matches 方法類似,此方法始終從區(qū)域的開(kāi)頭開(kāi)始;與之不同的是,它不需要匹配整個(gè)區(qū)域。
如果匹配成功,則可以通過(guò) start、end 和 group 方法獲取更多信息。
返回:
當(dāng)且僅當(dāng)輸入序列的前綴匹配此匹配器的模式時(shí)才返回 true。
小編為大家整理了這些易混知識(shí)點(diǎn),但是還是不夠全面,需要大家在之后的學(xué)習(xí)中不斷積累,正則表達(dá)式最大的難點(diǎn)在于熟練書寫正則表達(dá)式,大家應(yīng)該針對(duì)難點(diǎn)進(jìn)行學(xué)習(xí),相信一定會(huì)有所收獲。

相關(guān)文章

  • 排序算法圖解之Java選擇排序

    排序算法圖解之Java選擇排序

    選擇排序的工作原理是:第一次從待排序的數(shù)據(jù)元素中選出最?。ɑ蜃畲螅┑囊粋€(gè)元素,存放在序列的起始位置,然后再?gòu)氖S嗟奈磁判蛟刂袑ふ业阶钚。ù螅┰?,然后放到已排序的序列的末尾。本文通過(guò)圖片和示例介紹了選擇排序,需要的可以參考一下
    2022-11-11
  • SpringBoot集成MQ的過(guò)程(四種交換機(jī)的實(shí)例)

    SpringBoot集成MQ的過(guò)程(四種交換機(jī)的實(shí)例)

    本文介紹了RabbitMQ中四種交換機(jī)(直連、扇出、主題和頭交換機(jī))的使用方法,包括路由機(jī)制、典型場(chǎng)景和實(shí)現(xiàn)步驟,通過(guò)創(chuàng)建SpringBoot項(xiàng)目并配置交換機(jī)、隊(duì)列和消費(fèi)者,展示了如何發(fā)送和接收消息,每種交換機(jī)的示例代碼和測(cè)試步驟也一并提供,感興趣的朋友一起看看吧
    2025-03-03
  • springboot項(xiàng)目中沒(méi)有識(shí)別到y(tǒng)ml文件解決辦法

    springboot項(xiàng)目中沒(méi)有識(shí)別到y(tǒng)ml文件解決辦法

    這篇文章主要給大家介紹了springboot項(xiàng)目中沒(méi)有識(shí)別到y(tǒng)ml文件解決辦法,文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Spring Boot中的Properties的使用詳解

    Spring Boot中的Properties的使用詳解

    這篇文章主要介紹了Spring Boot中的Properties的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • @RequestParam 接收參數(shù)的值為null的處理方式

    @RequestParam 接收參數(shù)的值為null的處理方式

    這篇文章主要介紹了@RequestParam 接收參數(shù)的值為null的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • IntelliJ IDEA 統(tǒng)一設(shè)置編碼為utf-8編碼的實(shí)現(xiàn)

    IntelliJ IDEA 統(tǒng)一設(shè)置編碼為utf-8編碼的實(shí)現(xiàn)

    這篇文章主要介紹了IntelliJ IDEA 統(tǒng)一設(shè)置編碼為utf-8編碼的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • IntelliJ IDEA中如何調(diào)試Java Stream操作

    IntelliJ IDEA中如何調(diào)試Java Stream操作

    這篇文章主要介紹了IntelliJ IDEA中如何優(yōu)雅的調(diào)試Java Stream操作,在強(qiáng)大的IDEA插件支持下,stream的調(diào)試其實(shí)也沒(méi)那么難了,下面就來(lái)學(xué)習(xí)一下在IDEA中如何調(diào)試stream操作吧
    2022-05-05
  • uploadify上傳及后臺(tái)文件合法性驗(yàn)證的代碼解析

    uploadify上傳及后臺(tái)文件合法性驗(yàn)證的代碼解析

    這篇文章主要介紹了uploadify上傳及后臺(tái)文件合法性驗(yàn)證的代碼解析,整段代碼分為后臺(tái)上傳方法,文件合法性驗(yàn)證類,前端上傳js,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • java跨域cookie失效問(wèn)題及解決

    java跨域cookie失效問(wèn)題及解決

    文章介紹了現(xiàn)代Web應(yīng)用中前后端分離架構(gòu)下跨域請(qǐng)求和Cookie處理的問(wèn)題,包括現(xiàn)象描述、跨域Cookie的原理、解決方案(如Java后端、前端Vue、Nginx配置,以及使用window.localStorage存儲(chǔ)數(shù)據(jù)),以及實(shí)踐案例和常見(jiàn)問(wèn)題排查
    2025-01-01
  • 深入了解Java設(shè)計(jì)模式之UML類圖

    深入了解Java設(shè)計(jì)模式之UML類圖

    UML?即?Unified?Modeling?Language?統(tǒng)一建模語(yǔ)言,是用來(lái)設(shè)計(jì)軟件的可視化建模語(yǔ)言。本文就帶大家了解一下UML中類圖的定義與使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11

最新評(píng)論

临漳县| 平阳县| 叙永县| 大冶市| 平顺县| 突泉县| 朔州市| 杭州市| 阳高县| 湾仔区| 叶城县| 广河县| 南涧| 宜州市| 甘谷县| 化州市| 友谊县| 灌云县| 涪陵区| 栖霞市| 武川县| 安岳县| 峨山| 梅州市| 扎赉特旗| 彝良县| 应城市| 贞丰县| 齐齐哈尔市| 红原县| 同德县| 高州市| 新兴县| 景东| 沙湾县| 宜兴市| 双城市| 庆元县| 凭祥市| 安丘市| 章丘市|