前后查找是指對某一位置的前后內(nèi)容進行查找翎蹈,匹配本身并不返回筏勒,而是用來確定正確的匹配位置琴昆。即一個必須匹配但不在結(jié)果中返回的模式(只匹配不消費)富玷。
向前查找
語法
(?=pattern)
一個以?=開頭的子表達(dá)式,需要匹配的文本跟在=的后面
例:匹配協(xié)議名
http://www.baidu.com
https://www.google.com
ftp://ftp.forta.com
正則表達(dá)式
.+(?=:)
結(jié)果
匹配到:http狂魔、https蒜埋、ftp
解析
.+
匹配任意字符一次或多次淫痰。(?=:)
匹配:
最楷,但:
不出現(xiàn)在結(jié)果中(不消費)。因為?=
向正則表達(dá)式引擎表明:只要找到:
的位置就好了待错,不要把它包括在最終的匹配結(jié)果里(不消費它)籽孙。結(jié)果值包含:
前面的字符
向后匹配
語法
(?<=pattern)
例:匹配價格
apple:¥2.99
banana:¥5.5
pitaya:¥100.21
正則表達(dá)式
(?<=¥)[0-9.]+
結(jié)果
匹配到2.99、5.5火俄、100.21
解析
(?<=¥)
匹配到¥
但不出現(xiàn)在結(jié)果里(不消費)犯建,[0-9.]+
匹配0-9或.的任意一次或多次
組合前后查找
向前查找和向后查找可以組合在一起使用
例:只匹配標(biāo)題文本
<title>hello world</title>
正則表達(dá)式
(?<=\<[tT][iI][tI][lL][eE]>).*?(?=</[tT][iI][tI][lL][eE]>)
結(jié)果
匹配到hello world
解析
(?<=\<[tT][iI][tI][lL][eE]>)
向后查找,匹配<title>但不消費它瓜客,為了減少歧義适瓦,title的做尖括號轉(zhuǎn)譯了。.*?
匹配到hello world谱仪。(?=</[tT][iI][tI][lL][eE]>)
向前查找玻熙,匹配到</title>,但不消費它疯攒。
對前后查找取非
對前后查找取非即負(fù)前后查找嗦随,它的意思是返回不與前后查找的給定模式相匹配的文本。
語法
負(fù)向前查找 (?!)
負(fù)向后查找 (?<!)
例:查找非價格數(shù)字
I paid $30 for 100 apples, 50 oranges.
I saved $5 on this order.
正則表達(dá)式
\b(?<!\$)\d+\b
結(jié)果
匹配到:100敬尺、50
解析
\d
匹配到數(shù)字枚尼,(?<!\$)
匹配到不以30中的0也會被匹配到崎溃。