Java正則環(huán)視和反向引用功能與用法詳解
本文實(shí)例講述了Java正則環(huán)視和反向引用功能與用法。分享給大家供大家參考,具體如下:
環(huán)視
1、環(huán)視概念
環(huán)視,又稱為零寬斷言,簡(jiǎn)稱斷言。
環(huán)視強(qiáng)調(diào)位置(前面或后面),必須匹配環(huán)視表達(dá)式,才能匹配成功。
環(huán)視可認(rèn)為是虛擬加入到它所在位置的附加判斷條件,并不消耗正則的匹配字符。
2、環(huán)視基礎(chǔ)表達(dá)式
(?=Expression) 順序肯定環(huán)視,表示所在位置右側(cè)能夠匹配Expression
(?!Expression) 順序否定環(huán)視,表示所在位置右側(cè)不能匹配Expression
(?<=Expression) 逆序肯定環(huán)視,表示所在位置左側(cè)能夠匹配Expression
(?<!Expression) 逆序否定環(huán)視,表示所在位置左側(cè)不能匹配Expression
Note:順序(=)右側(cè)匹配,逆序環(huán)視比順序環(huán)視多了個(gè)<。
JavaScript中只支持順序環(huán)視,不支持逆序環(huán)視。
Java中雖然順序環(huán)視和逆序環(huán)視都支持,但是逆序環(huán)視只支持長(zhǎng)度確定的表達(dá)式,逆序環(huán)視中量詞只支持?,不支持其它長(zhǎng)度不定的量詞。
3、使用示例
3.1、順序肯定環(huán)視(?=Expression)
3.1.1、匹配后綴結(jié)尾是“.txt”的不含后綴的文件名
【.+(?=\.txt)】
文本:
txtfile.txt
exefile.exe
inifile.ini
匹配結(jié)果:txtfile
3.1.2、匹配密碼(必須包含字母(不區(qū)分大小寫)、數(shù)字,6-16位)
【^(?=.*?[a-zA-Z])(?=.*?[0-9])[a-zA-Z0-9]{6,16}$】
(?=.*?[a-zA-Z]) 限定后面的字符中至少有一個(gè)字母,使用 (?=.*?[0-9]) 限定后面的字符中至少有一個(gè)數(shù)字,最后通過(guò)實(shí)際匹配正則 [a-zA-Z0-9]{6,16} 限定量詞。
3.2、順序否定環(huán)視(?!Expression)
3.2.1、匹配除<a></a>之外的標(biāo)簽
【<(?!/?a\b)[^<]+?>】
文本:<a><a1></a>zxiaofan<div>com</d>iv>cc
匹配結(jié)果:
<a1>
<div>
</d>
3.2.2、匹配后綴結(jié)尾不是“.txt”的含后綴的文件名
【.+(?!\.txt)】表達(dá)式錯(cuò)誤,因?yàn)?+沒(méi)有指定位置且是貪婪匹配。(因此.+就能直接匹配txtfile.txt了)
【(.+)(?!\.txt)\.[^.]+$】
文本:
txtfile.txt
exefile.exe
inifile.ini
匹配結(jié)果:
exefile.exe
inifile.ini
3.3、逆序肯定環(huán)視(?<=Expression)
3.3.1、匹配指定標(biāo)簽之間的內(nèi)容
【(?<=<div>)[^<]+(?=</div>)】
文本:<div>zxiaofan.com</div>
匹配結(jié)果:zxiaofan.com
3.3.2、獲取指定參數(shù)的值
【(?<=name=).+】
文本:
name=zxiaofan
age=20
level=6
匹配結(jié)果:zxiaofan
3.4、逆序否定環(huán)視(?<!Expression)
3.4.1、獲取非指定參數(shù)的值
【^[^=#]+=(?<!name=).+$】
文本:
name=zxiaofan
age=20
level=6
#sex=1
匹配結(jié)果:
age=20
level=6
4、綜合示例
4.1、必須包含字母、數(shù)字、特殊字符
【^(?=.*?[a-zA-Z])(?=.*?\d)(?![a-zA-Z\d]+$).+$】
解釋:^(?=.*?[a-zA-Z])限制必須有字母;(?=.*?\d)限制必須有數(shù)字;(?![a-zA-Z\d]+$)限制不能全為數(shù)字和字母。
4.2、匹配主域名(匹配頂級(jí)域名)
【(?<=(?:://\w{0,50}\.)?)(?:\w{0,50}\.)(?:com\.cn|net\.cn|org\.cn|com|net|org|cn|biz|info|cc|tv)】
文本:
vip.zxiaofan.com.cn
http://zxiaofan.com/123
www.zxiaofan.org.cn
匹配結(jié)果:
zxiaofan.com.cn
zxiaofan.com
zxiaofan.org.cn
Note:【?:】不捕獲匹配的文本到自動(dòng)命名的組,也不給此組分配組好。(去掉后不影響結(jié)果)
特殊域名:萬(wàn)網(wǎng)www.net.cn
4.3、匹配5連號(hào)手機(jī)號(hào)碼
【1[34578]\d{3}(\d)(?!\1{1})(\d)\2{4}】
文本:
18328501111
18328511111
18328551111
18328111111
匹配結(jié)果:
18328511111
Note1:\1匹配第一組內(nèi)容
Note2:(?!\1{1})過(guò)濾6連號(hào)的號(hào)碼
反向引用
1、反向引用概念
捕獲組:按照()子表達(dá)式劃分成若干組;每出現(xiàn)一對(duì)()就是一個(gè)捕獲組;引擎會(huì)對(duì)捕獲組進(jìn)行編號(hào),編號(hào)規(guī)則是左括號(hào)(從左到右出現(xiàn)的順序,從1開(kāi)始編號(hào)。
捕獲組命名:
(?<name>exp) 匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp);
(?:exp) 匹配exp,不捕獲匹配的文本到自動(dòng)命名的組,也不給此分組分配組號(hào)。
反向引用:
\1表示第一組(abc);\2表示第二組;
\k<Word>:引用指定名字的組。
2、使用示例
2.1、匹配首尾相同的文件名
【([a-z]{3})[a-z]+\.\1{1}】
文本:
txtfile.txt
exefile.txt
fileini.ini
匹配結(jié)果:
txtfile.txt
Note:([a-z]{3})為第一組,\1{1}表示引用第一組一次(這里不能寫成\1{3})。
PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測(cè)試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java正則表達(dá)式技巧大全》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- 正則表達(dá)式中環(huán)視的簡(jiǎn)單應(yīng)用示例【基于java】
- Java 正則表達(dá)式詳解
- JAVA正則表達(dá)式 Pattern和Matcher
- Java正則多字符串匹配替換
- java正則表達(dá)式驗(yàn)證郵箱、電話號(hào)碼示例
- java正則表達(dá)式四種常用的處理方式(匹配、分割、替代、獲?。?/a>
- Java/Js下使用正則表達(dá)式匹配嵌套Html標(biāo)簽
- Java正則表達(dá)式過(guò)濾出字母、數(shù)字和中文
- JAVA中正則表達(dá)式匹配,替換,查找,切割的方法
- 用Java正則去掉字符串中重復(fù)出現(xiàn)的字符
相關(guān)文章
SpringBoot實(shí)現(xiàn)文件下載功能的方式分享
這篇文章主要為大家詳細(xì)介紹了SpringBoot這哪個(gè)實(shí)現(xiàn)文件下載功能的幾種方式,文中的實(shí)現(xiàn)方法簡(jiǎn)介易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03Spring?Boot緩存實(shí)戰(zhàn)之Redis?設(shè)置有效時(shí)間和自動(dòng)刷新緩存功能(時(shí)間支持在配置文件中配置)
這篇文章主要介紹了Spring?Boot緩存實(shí)戰(zhàn)?Redis?設(shè)置有效時(shí)間和自動(dòng)刷新緩存,時(shí)間支持在配置文件中配置,需要的朋友可以參考下2023-05-05Tomcat 服務(wù)器 在45秒內(nèi)未啟動(dòng)成功的解決方法
下面小編就為大家?guī)?lái)一篇Tomcat 服務(wù)器 在45秒內(nèi)未啟動(dòng)成功的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11java中金額元轉(zhuǎn)萬(wàn)元工具類的實(shí)例
這篇文章主要介紹了java中金額元轉(zhuǎn)萬(wàn)元工具類的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02Java解析xml文件和json轉(zhuǎn)換的方法(DOM4j解析)
相信大家都知道Java解析xml的方法有四種,每種方法都很不錯(cuò),今天通過(guò)本文給大家分享使用DOM4j進(jìn)行解析的方法,文章通過(guò)兩種方法給大家進(jìn)行解析,感興趣的朋友一起看看吧2021-08-08