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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

初步理解正則表達(dá)式中的Lookaround

2019-11-17 03:40:26
字體:
供稿:網(wǎng)友

正則表達(dá)式中有Lookahead and Lookbehind一說,可以統(tǒng)稱為L(zhǎng)ookaround。
Lookahead包含:(?=)、(?!)
Lookbehind包含:(?<=)、(?<!)
可以看出它們倆都包含了正負(fù),即"="與"!"
Lookbehind中多了個(gè)"<",為了便于記憶,可以把"<"形象地看成"向左看"!
同樣,為了便于記憶,可以認(rèn)為:ahead是向右看,behind是向左看。

 

為了便于理解,先撇開Lookaround,進(jìn)行匹配,然后再考慮它。
例如:(?<=ab)cd,我就先把它看成:cd,然后再考慮(?<=ab)

 

如果,我有一個(gè)正則表達(dá)式:(?<=ab)cd,判斷它能否匹配abcd、efcd。
這是一個(gè)Lookbehind,我先考慮cd,顯然cd都可以匹配abcd、efcd,但是當(dāng)我再考慮(?<=ab)時(shí),只有abcd能夠被匹配了,因?yàn)樵赼bcd中的cd前面有ab,但是efcd中的cd前面沒有ab。

 

同樣,我可以分析:ab(?=cd),能否匹配abcd、abef。
這是一個(gè)Lookahead,我先考慮ab,顯然ab都可以匹配abcd、abef,但是當(dāng)我再考慮(?=cd)時(shí),只有abcd能夠被匹配了,因?yàn)樵赼bcd中的ab后面有cd,但是abef中的ab后面沒有cd。

 

實(shí)際上,無論是Lookahead還是Lookbehind都是,從左到右進(jìn)行匹配的。
Lookahead可以像上面那樣理解;
Lookbehind其實(shí)是,先到左邊看看,是否滿足,再匹配的。但是,也可以像上面那樣理解。

 

經(jīng)過上述介紹,大家可能就思維定勢(shì)了,認(rèn)為L(zhǎng)ookbehind都在左邊,而Lookahead都是在右邊。
如果要我運(yùn)用Lookaround來,判斷一個(gè)單詞是否以s結(jié)尾/開頭,可能首先就會(huì)寫出:

/b/w+(?=s)/b        //以s結(jié)尾/b(?<=s)/w+/b       //以s開頭
 

 

不幸的是,上面兩個(gè)都是錯(cuò)的!千萬不要有思維定勢(shì),正確的是這樣的:

/b/w+(?<=s)/b       //以s結(jié)尾/b/w+(?<!s)/b       //不以s結(jié)尾/b(?=s)/w+/b        //以s開頭/b(?!s)/w+/b        //不以s開頭
 

 

借助于Lookaround可以寫出具有組合功能的正則表達(dá)式。
如果,你想匹配一個(gè)單詞,它滿足:

1.長(zhǎng)度為4-62.包含oo3.不以s結(jié)尾
 

可以用這樣的正則表達(dá)式來搞定:

/b(?=/w{4,6}/b)/w*oo/w*(?<!s)/b
 

它可以匹配:zooz、ooooo、xxoo等
但是不匹配:xoo、zoos、ooooooo等

 

 

如發(fā)現(xiàn)錯(cuò)誤之處,請(qǐng)大家指出!

如有更好的理解方式,請(qǐng)共享!

謝謝!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广州市| 博兴县| 阳原县| 任丘市| 西乌珠穆沁旗| 巍山| 同仁县| 义马市| 商洛市| 昌乐县| 盐边县| 保山市| 玛纳斯县| 公主岭市| 六安市| 兴国县| 平山县| 克拉玛依市| 纳雍县| 霞浦县| 延边| 青海省| 满洲里市| 从江县| 永福县| 湘阴县| 大方县| 丹凤县| 米易县| 汤阴县| 郧西县| 阳朔县| 岑溪市| 和龙市| 闽清县| 新和县| 新宁县| 平原县| 鲁甸县| 怀化市| 开封县|