向前查找
- 向前查找指定了一個(gè)必須匹配但不在結(jié)果中返回的模式
- 有些正則表達(dá)式文檔使用術(shù)語“消費(fèi)”(consume)來表述“匹配和返回文本”的含義。在向前查找里,被匹配的文本不包含在最終返回的匹配結(jié)果里,這被稱為“不消費(fèi)”
- 被匹配文本之后的字符(但不消費(fèi)它)
- 向前查找實(shí)際就是一個(gè)子表達(dá)式
- 一個(gè)向前查找模式其實(shí)就是一個(gè)以?=開頭的子表達(dá)式,需要匹配的文本跟在=的后面
向后查找
- 向后查找,也就是查找出現(xiàn)在被匹配文本之前的字符(但不消費(fèi)它),向后查找操作符是?<=。
貪婪型元字符
- 它們在進(jìn)行匹配時(shí)的行為模式是多多益善而不是適可而止的。它們會(huì)盡可能地從一段文本的開頭一直匹配到這段文本的末尾,而不是從這段文本的開頭匹配到碰到第一個(gè)匹配時(shí)為止
-
https://www.baidu.com/wd
https://music.163.com/#/discover/toplist?id=3778678
https://translate.google.cn/#en/zh-CN/Th
http://www.itdecent.cn/u/a05e3c276604
- 要求
以上為我隨便從自己的瀏覽器中粘貼出來的網(wǎng)頁地址,需要將其中的域名過濾出來。 - 正則表達(dá)式
(?<=//).*?(?=/)
-
分析
1). 首先一步一步分析來看,首先將需要的內(nèi)容匹配出來,通過分析域名前面有兩個(gè)斜杠,后邊有一個(gè)斜杠,則正則表達(dá)式如下//.*/
分析1)
出現(xiàn)上圖的匹配結(jié)果,這里的要求是匹配到域名后的第一個(gè)/就停止匹配,但其盡量向行末匹配,遇到最后一個(gè)/才停止匹配;因?yàn)?em>為貪婪型元字符,需要用到其懶惰型元字符,即?2). 用貪婪型模式來匹配,正則表達(dá)式如下
//.*?/
分析2)3). 要求只匹配域名,所以需要將域名前后的斜杠過濾掉,這里就需要用到向后查找和向前查找以及子表達(dá)式;正則表達(dá)式如下
(?<=//).*?(?=/)
分析3)
用()將“//”選定為一個(gè)子表達(dá)式,在//前加上?<=的前綴,表示向后查找,即//只匹配但不“消費(fèi)”:同理后邊的/也是一樣的,向前查找/,匹配但不消費(fèi)。
本文有些內(nèi)容摘自于
〔美〕Ben Forta. 《正則表達(dá)式必知必會(huì) 》(圖靈程序設(shè)計(jì)叢書 71) (Kindle位置1974). 人民郵電出版社. Kindle 版本


