正則表達(dá)式練習(xí)(向前查找、向后查找、貪婪/懶惰型元字符)

向前查找
  • 向前查找指定了一個(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í)為止
  1. 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 版本

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容