国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Java正則環視和反向引用功能與用法詳解

2024-07-13 10:16:27
字體:
來源:轉載
供稿:網友

本文實例講述了Java正則環視和反向引用功能與用法。分享給大家供大家參考,具體如下:

環視

1、環視概念

環視,又稱為零寬斷言,簡稱斷言。

環視強調位置(前面或后面),必須匹配環視表達式,才能匹配成功。

環視可認為是虛擬加入到它所在位置的附加判斷條件,并不消耗正則的匹配字符。

2、環視基礎表達式

(?=Expression) 順序肯定環視,表示所在位置右側能夠匹配Expression
(?!Expression) 順序否定環視,表示所在位置右側不能匹配Expression
(?<=Expression) 逆序肯定環視,表示所在位置左側能夠匹配Expression
(?<!Expression) 逆序否定環視,表示所在位置左側不能匹配Expression

Note:順序(=)右側匹配,逆序環視比順序環視多了個<。

JavaScript中只支持順序環視,不支持逆序環視。

Java中雖然順序環視和逆序環視都支持,但是逆序環視只支持長度確定的表達式,逆序環視中量詞只支持?,不支持其它長度不定的量詞。

3、使用示例

3.1、順序肯定環視(?=Expression)

3.1.1、匹配后綴結尾是“.txt”的不含后綴的文件名

【.+(?=/.txt)】

文本:

txtfile.txt
exefile.exe
inifile.ini

匹配結果:txtfile

3.1.2、匹配密碼(必須包含字母(不區分大小寫)、數字,6-16位)
【^(?=.*?[a-zA-Z])(?=.*?[0-9])[a-zA-Z0-9]{6,16}$】

(?=.*?[a-zA-Z]) 限定后面的字符中至少有一個字母,使用 (?=.*?[0-9]) 限定后面的字符中至少有一個數字,最后通過實際匹配正則 [a-zA-Z0-9]{6,16} 限定量詞。

3.2、順序否定環視(?!Expression)

3.2.1、匹配除<a></a>之外的標簽

【<(?!/?a/b)[^<]+?>】

文本:<a><a1></a>zxiaofan<div>com</d>iv>cc

匹配結果:

<a1>
<div>
</d>

3.2.2、匹配后綴結尾不是“.txt”的含后綴的文件名

【.+(?!/.txt)】表達式錯誤,因為.+沒有指定位置且是貪婪匹配。(因此.+就能直接匹配txtfile.txt了)
【(.+)(?!/.txt)/.[^.]+$】

文本:

txtfile.txt
exefile.exe
inifile.ini

匹配結果:

exefile.exe
inifile.ini

3.3、逆序肯定環視(?<=Expression)

3.3.1、匹配指定標簽之間的內容

【(?<=<div>)[^<]+(?=</div>)】

文本:<div>zxiaofan.com</div>

匹配結果:zxiaofan.com

3.3.2、獲取指定參數的值

【(?<=name=).+】

文本:

name=zxiaofan
age=20
level=6

匹配結果:zxiaofan

3.4、逆序否定環視(?<!Expression)

3.4.1、獲取非指定參數的值

【^[^=#]+=(?<!name=).+$】

文本:

name=zxiaofan
age=20
level=6
#sex=1

匹配結果:

age=20
level=6

4、綜合示例

4.1、必須包含字母、數字、特殊字符

【^(?=.*?[a-zA-Z])(?=.*?/d)(?![a-zA-Z/d]+$).+$】

解釋:^(?=.*?[a-zA-Z])限制必須有字母;(?=.*?/d)限制必須有數字;(?![a-zA-Z/d]+$)限制不能全為數字和字母。

4.2、匹配主域名(匹配頂級域名)

【(?<=(?::///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

匹配結果:

zxiaofan.com.cn
zxiaofan.com
zxiaofan.org.cn

Note:【?:】不捕獲匹配的文本到自動命名的組,也不給此組分配組好。(去掉后不影響結果)
特殊域名:萬網www.net.cn

4.3、匹配5連號手機號碼

【1[34578]/d{3}(/d)(?!/1{1})(/d)/2{4}】

文本:

18328501111
18328511111
18328551111
18328111111

匹配結果:

18328511111

Note1:/1匹配第一組內容
Note2:(?!/1{1})過濾6連號的號碼

反向引用

1、反向引用概念

捕獲組:按照()子表達式劃分成若干組;每出現一對()就是一個捕獲組;引擎會對捕獲組進行編號,編號規則是左括號(從左到右出現的順序,從1開始編號。

捕獲組命名:

(?<name>exp) 匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp);
(?:exp) 匹配exp,不捕獲匹配的文本到自動命名的組,也不給此分組分配組號。

反向引用:

/1表示第一組(abc);/2表示第二組;
/k<Word>:引用指定名字的組。

2、使用示例

2.1、匹配首尾相同的文件名

【([a-z]{3})[a-z]+/./1{1}】

文本:

txtfile.txt
exefile.txt
fileini.ini

匹配結果:

txtfile.txt

Note:([a-z]{3})為第一組,/1{1}表示引用第一組一次(這里不能寫成/1{3})。

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天长市| 东乡族自治县| 巴里| 西藏| 横山县| 五原县| 普定县| 永安市| 沅陵县| 巴彦淖尔市| 屏南县| 交城县| 盐源县| 邓州市| 达州市| 长寿区| 无极县| 思茅市| 遂溪县| 溧水县| 东乌珠穆沁旗| 泽州县| 无棣县| 高邮市| 石楼县| 石泉县| 藁城市| 安义县| 锡林浩特市| 贵德县| 修武县| 郑州市| 道孚县| 天津市| 达孜县| 星座| 河北省| 固原市| 塔城市| 梅河口市| 昌乐县|