婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 正則基礎(chǔ)之 環(huán)視 Lookaround

正則基礎(chǔ)之 環(huán)視 Lookaround

熱門標(biāo)簽:電銷機(jī)器人公司簡介 湖南企業(yè)智能外呼系統(tǒng)供應(yīng)商 錫林郭勒盟地圖標(biāo)注位置 RO地圖標(biāo)注app 知名的電話機(jī)器人 自制電銷機(jī)器人 高德地圖標(biāo)注短信簽約 百音電話機(jī)器人 福州工作銷售電話機(jī)器人

1       環(huán)視基礎(chǔ)

環(huán)視只進(jìn)行子表達(dá)式的匹配,不占有字符,匹配到的內(nèi)容不保存到最終的匹配結(jié)果,是零寬度的。環(huán)視匹配的最終結(jié)果就是一個(gè)位置。

環(huán)視的作用相當(dāng)于對所在位置加了一個(gè)附加條件,只有滿足這個(gè)條件,環(huán)視子表達(dá)式才能匹配成功。

環(huán)視按照方向劃分有順序和逆序兩種,按照是否匹配有肯定和否定兩種,組合起來就有四種環(huán)視。順序環(huán)視相當(dāng)于在當(dāng)前位置右側(cè)附加一個(gè)條件,而逆序環(huán)視相當(dāng)于在當(dāng)前位置左側(cè)附加一個(gè)條件。

表達(dá)式

說明

(?=Expression)

逆序肯定環(huán)視,表示所在位置左側(cè)能夠匹配Expression

(?!Expression)

逆序否定環(huán)視,表示所在位置左側(cè)不能匹配Expression

(?=Expression)

順序肯定環(huán)視,表示所在位置右側(cè)能夠匹配Expression

(?!Expression)

順序否定環(huán)視,表示所在位置右側(cè)不能匹配Expression

 對于環(huán)視的叫法,有的文檔里叫預(yù)搜索,有的叫什么什么斷言的,這里使用了更多人容易接受的《精通正則表達(dá)式》中“環(huán)視”的叫法,其實(shí)叫什么無所謂,只要知道是什么作用就是了,就這么幾個(gè)語法規(guī)則, 還是很容易記的

2       環(huán)視匹配原理

 環(huán)視是正則中的一個(gè)難點(diǎn),對于環(huán)視的理解,可以從應(yīng)用和原理兩個(gè)角度理解,如果想理解得更清晰、深入一些,還是從原理的角度理解好一些,正則匹配基本原理參考 NFA引擎匹配原理。

上面提到環(huán)視相當(dāng)于對“所在位置”附加了一個(gè)條件,環(huán)視的難點(diǎn)在于找到這個(gè)“位置”,這一點(diǎn)解決了,環(huán)視也就沒什么秘密可言了。

順序環(huán)視匹配過程

對于順序肯定環(huán)視(?=Expression)來說,當(dāng)子表達(dá)式Expression匹配成功時(shí),(?=Expression)匹配成功,并報(bào)告(?=Expression)匹配當(dāng)前位置成功。

對于順序否定環(huán)視(?!Expression)來說,當(dāng)子表達(dá)式Expression匹配成功時(shí),(?!Expression)匹配失敗;當(dāng)子表達(dá)式Expression匹配失敗時(shí),(?!Expression)匹配成功,并報(bào)告(?!Expression)匹配當(dāng)前位置成功;

順序肯定環(huán)視的例子已在NFA引擎匹配原理中講解過了,這里再講解一下順序否定環(huán)視。

 

源字符串:aap>one/p>bbdiv>two/div>cc

正則表達(dá)式:(?!/?p\b)[^>]+>

這個(gè)正則的意義就是匹配除p…>或/p>之外的其余標(biāo)簽。

匹配過程:

首先由字符“”取得控制權(quán),從位置0開始匹配,由于“”匹配“a”失敗,在位置0處整個(gè)表達(dá)式匹配失敗,第一次迭代匹配失敗,正則引擎向前傳動(dòng),由位置1處開始嘗試第二次迭代匹配。

重復(fù)以上過程,直到位置2,“”匹配“”成功,控制權(quán)交給“(?!/?p\b)”;“(?!/?p\b)”子表達(dá)式取得控制權(quán)后,進(jìn)行內(nèi)部子表達(dá)式的匹配。首先由“/?”取得控制權(quán),嘗試匹配“p”失敗,進(jìn)行回溯,不匹配,控制權(quán)交給“p”;由“p”來嘗試匹配“p”,匹配成功,控制權(quán)交給“\b”;由“\b”來嘗試匹配位置4,匹配成功。此時(shí)子表達(dá)式匹配完成,“/?p\b”匹配成功,那么環(huán)視表達(dá)式“(?!/?p\b)”就匹配失敗。在位置2處整個(gè)表達(dá)式匹配失敗,新一輪迭代匹配失敗,正則引擎向前傳動(dòng),由位置3處開始嘗試下一輪迭代匹配。

在位置8處也會(huì)遇到一輪“/?p\b”匹配“/p”成功,而導(dǎo)致環(huán)視表達(dá)式“(?!/?p\b)”匹配失敗,從而導(dǎo)致整個(gè)表達(dá)式匹配失敗的過程。

重復(fù)以上過程,直到位置14,“”匹配“”成功,控制權(quán)交給“(?!/?p\b)”;“/?”嘗試匹配“d”失敗,進(jìn)行回溯,不匹配,控制權(quán)交給“p”;由“p”來嘗試匹配“d”,匹配失敗,已經(jīng)沒有備選狀態(tài)可供回溯,匹配失敗。此時(shí)子表達(dá)式匹配完成,“/?p\b”匹配失敗,那么環(huán)視表達(dá)式“(?!/?p\b)”就匹配成功。匹配的結(jié)果是位置15,然后控制權(quán)交給“[^>]+”;由“[^>]+”從位置15進(jìn)行嘗試匹配,可以成功匹配到“div”,控制權(quán)交給“>”;由“>”來匹配“>”。

此時(shí)正則表達(dá)式匹配完成,報(bào)告匹配成功。匹配結(jié)果為“div>”,開始位置為14,結(jié)束位置為19。其中“”匹配“”,“(?!/?p\b)”匹配位置15,“[^>]+”匹配字符串“div”,“>”匹配“>”。

逆序環(huán)視基礎(chǔ)

對于逆序肯定環(huán)視(?=Expression)來說,當(dāng)子表達(dá)式Expression匹配成功時(shí),(?=Expression)匹配成功,并報(bào)告(?=Expression)匹配當(dāng)前位置成功。

對于逆序否定環(huán)視(?!Expression)來說,當(dāng)子表達(dá)式Expression匹配成功時(shí),(?!Expression)匹配失敗;當(dāng)子表達(dá)式Expression匹配失敗時(shí),(?!Expression)匹配成功,并報(bào)告(?!Expression)匹配當(dāng)前位置成功;

順序環(huán)視相當(dāng)于在當(dāng)前位置右側(cè)附加一個(gè)條件,所以它的匹配嘗試是從當(dāng)前位置開始的,然后向右嘗試匹配,直到某一位置使得匹配成功或失敗為止。而逆序環(huán)視的特殊處在于,它相當(dāng)于在當(dāng)前位置左側(cè)附加一個(gè)條件,所以它不是在當(dāng)前位置開始嘗試匹配的,而是從當(dāng)前位置左側(cè)某一位置開始,匹配到當(dāng)前位置為止,報(bào)告匹配成功或失敗。

順序環(huán)視嘗試匹配的起點(diǎn)是確定的,就是當(dāng)前位置,而匹配的終點(diǎn)是不確定的。逆序環(huán)視匹配的起點(diǎn)是不確定的,是當(dāng)前位置左側(cè)某一位置,而匹配的終點(diǎn)是確定的,就是當(dāng)前位置。

所以順序環(huán)視相對是簡單的,而逆序環(huán)視相對是復(fù)雜的。這也就是為什么大多數(shù)語言和工具都提供了對順序環(huán)視的支持,而只有少數(shù)語言提供了對逆序環(huán)視支持的原因。

JavaScript中只支持順序環(huán)視,不支持逆序環(huán)視。

Java中雖然順序環(huán)視和逆序環(huán)視都支持,但是逆序環(huán)視只支持長度確定的表達(dá)式,逆序環(huán)視中量詞只支持“?”,不支持其它長度不定的量詞。長度確定時(shí),引擎可以向左查找固定長度的位置作為起點(diǎn)開始嘗試匹配,而如果長度不確定時(shí),就要從位置0開始嘗試匹配,處理的復(fù)雜度是顯而易見的。

目前只有.NET中支持不確定長度的逆序環(huán)視。

逆序環(huán)視匹配過程

源字符串:div>a test/div>

正則表達(dá)式:(?=div>)[^]+(?=/div>)

這個(gè)正則的意義就是匹配div>和/div>標(biāo)簽之間的內(nèi)容,而不包括div>和/div>標(biāo)簽本身。

匹配過程:

首先由“(?=div>)”取得控制權(quán),從位置0開始匹配,由于位置0是起始位置,左側(cè)沒有任何內(nèi)容,所以“div>”必然匹配失敗,從而環(huán)視表達(dá)式“(?=div>)”匹配失敗,導(dǎo)致整個(gè)表達(dá)式在位置0處匹配失敗。第一輪迭代匹配失敗,正則引擎向前傳動(dòng),由位置1處開始嘗試第二次迭代匹配。

直到傳動(dòng)到位置5,“(?=div>)”取得控制權(quán),向左查找5個(gè)位置,由位置0開始匹配,由“div>”匹配“div>”成功,從而“(?=div>)”匹配成功,匹配的結(jié)果為位置5,控制權(quán)交給“[^]+”;“[^]+”從位置5開始嘗試匹配,匹配“a test”成功,控制權(quán)交給“(?=/div>)”;由“/div>”匹配“/div>”成功,從而“(?=/div>)”匹配成功,匹配結(jié)果為位置11。

此時(shí)正則表達(dá)式匹配完成,報(bào)告匹配成功。匹配結(jié)果為“a test”,開始位置為5,結(jié)束位置為11。其中“(?=div>)”匹配位置5,“[^]+”匹配“a test”,“(?=/div>)”匹配位置11。

逆序否定環(huán)視的匹配過程與上述過程類似,區(qū)別只是當(dāng)Expression匹配失敗時(shí),逆序否定表達(dá)式(?!Expression)才匹配成功。

到此環(huán)視的匹配原理已基本講解完,環(huán)視也就沒有什么秘密可言了,所需要的,也只是多加練習(xí)而已。

3       環(huán)視應(yīng)用

今天寫累了,暫時(shí)就給出一個(gè)環(huán)視的綜合應(yīng)用實(shí)例吧,至于環(huán)視的應(yīng)用場景和技巧,后面再整理。

需求:數(shù)字格式化成用“,”的貨幣格式。

正則表達(dá)式:(?=\d)(?!\.\d*)(?=(?:\d{3})+(?:\.\d+|$))

測試代碼:

double[] data = new double[] { 0, 12, 123, 1234, 12345, 123456, 1234567, 123456789, 1234567890, 12.345, 123.456, 1234.56, 12345.6789, 123456.789, 1234567.89, 12345678.9 };

foreach (double d in data)

{

    richTextBox2.Text += "源字符串:" + d.ToString().PadRight(15) + "格式化:" + Regex.Replace(d.ToString(), @"(?=\d)(?!\.\d*)(?=(?:\d{3})+(?:\.\d+|$))", ",") + "\n";

}

輸出結(jié)果:

源字符串:0              格式化:0

源字符串:12             格式化:12

源字符串:123            格式化:123

源字符串:1234           格式化:1,234

源字符串:12345          格式化:12,345

源字符串:123456         格式化:123,456

源字符串:1234567        格式化:1,234,567

源字符串:123456789      格式化:123,456,789

源字符串:1234567890     格式化:1,234,567,890

源字符串:12.345         格式化:12.345

源字符串:123.456        格式化:123.456

源字符串:1234.56        格式化:1,234.56

源字符串:12345.6789     格式化:12,345.6789

源字符串:123456.789     格式化:123,456.789

源字符串:1234567.89     格式化:1,234,567.89

源字符串:12345678.9     格式化:12,345,678.9

實(shí)現(xiàn)分析:

首先根據(jù)需求可以確定是把一些特定的位置替換為“,”,接下來就是分析并找到這些位置的規(guī)律,并抽象出來以正則表達(dá)式來表示。

1、   這個(gè)位置的左側(cè)必須為數(shù)字

2、   這個(gè)位置右側(cè)到出現(xiàn)“.”或結(jié)尾為止,必須是數(shù)字,且數(shù)字的個(gè)數(shù)必須為3的倍數(shù)

3、   這個(gè)位置左側(cè)相隔任意個(gè)數(shù)字不能出現(xiàn)“.”

由以上三條,就可以完全確定這些位置,只要實(shí)現(xiàn)以上三條,組合一下正則表達(dá)式就可以了。

根據(jù)分析,最終匹配的結(jié)果是一個(gè)位置,所以所有子表達(dá)式都要求是零寬度。

1、   是對當(dāng)前所在位置左側(cè)附加的條件,所以要用到逆序環(huán)視,因?yàn)橐蟊仨毘霈F(xiàn),所以是肯定的,符合這一條件的子表達(dá)式即為“(?=\d)

2、   是對當(dāng)前所在位置右側(cè)附加的條件,所以要用到順序環(huán)視,也是要求出現(xiàn),所以是肯定的,是數(shù)字,且個(gè)數(shù)為3的倍數(shù),即“(?=(?:\d{3})*)”,到出現(xiàn)“.”或結(jié)尾為止,即“(?=(?:\d{3})*(?:\.|$))

3、   是對當(dāng)前所在位置左側(cè)附加的條件,所以要用到逆序環(huán)視,因?yàn)橐蟛荒艹霈F(xiàn),所以是否定的,即“(?!\.\d*)

因?yàn)榱銓挾鹊淖颖磉_(dá)式是非互斥的,最后匹配的都是同一個(gè)位置,所以先后順序是不影響最后的匹配結(jié)果的,可以任意組合,只是習(xí)慣上把逆序環(huán)視寫在左側(cè),順序環(huán)視寫在右側(cè)。

您可能感興趣的文章:
  • 正則表達(dá)式中環(huán)視的簡單應(yīng)用示例【基于java】
  • 正則應(yīng)用之 逆序環(huán)視探索 .
  • 正則匹配原理之 逆序環(huán)視深入 .
  • javascript 正則表達(dá)式分組、斷言詳解
  • 正則表達(dá)式之零寬斷言實(shí)例詳解【基于PHP】
  • 正則表達(dá)式零寬斷言詳解
  • 正則表達(dá)式斷言、巡視(Assertions)、正向斷言、反向斷言介紹
  • 正則表達(dá)式環(huán)視概念與用法分析

標(biāo)簽:秦皇島 怒江 玉林 昆明 河北 西寧 吉林 茂名

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《正則基礎(chǔ)之 環(huán)視 Lookaround》,本文關(guān)鍵詞  正則,基礎(chǔ),之,環(huán)視,Lookaround,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《正則基礎(chǔ)之 環(huán)視 Lookaround》相關(guān)的同類信息!
  • 本頁收集關(guān)于正則基礎(chǔ)之 環(huán)視 Lookaround的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91国产免费看| 亚洲精品综合在线| 国产成人综合网站| 国产女人aaa级久久久级| 在线区一区二视频| 亚洲成av人片一区二区三区| 欧美裸体一区二区三区| 久久综合五月天婷婷伊人| 在线这里只有精品| 久久99国产精品免费| 国产日韩欧美一区二区三区乱码 | 欧美一区二区三区免费| 婷婷综合另类小说色区| 欧美激情一区二区在线| 日韩欧美一区中文| 久久久久久97三级| 91福利视频久久久久| 丝袜美腿一区二区三区| 五月激情综合色| 亚洲午夜一区二区三区| 色综合久久99| 久久国产精品一区二区| 91麻豆精品秘密| 欧美高清精品3d| 久久精品国产精品亚洲红杏| 一级女性全黄久久生活片免费| 2023国产精品| 综合电影一区二区三区| 亚洲精品网站在线观看| 国产视频一区不卡| 国产精品白丝在线| 亚洲日本成人在线观看| 欧美一卡在线观看| 欧美videossexotv100| 色偷偷一区二区三区| 久久色成人在线| 成人免费在线视频观看| 日韩欧美一二三| 国产精品久久久久影视| 日韩av不卡一区二区| 日韩avvvv在线播放| 99视频超级精品| 精品99一区二区| 亚洲成a人片在线观看中文| 激情六月婷婷久久| 91丨九色丨尤物| 日日摸夜夜添夜夜添国产精品| 中文字幕在线一区| 亚洲天堂网中文字| 亚洲色图色小说| 亚洲男人的天堂av| 另类小说综合欧美亚洲| 久久这里只有精品首页| 欧美区视频在线观看| 91精品国产91久久久久久最新毛片| 成人网页在线观看| 高清不卡在线观看| 色狠狠桃花综合| 在线观看一区二区精品视频| 中国色在线观看另类| 日韩欧美在线影院| 欧美在线看片a免费观看| 蜜臀精品一区二区三区在线观看| 这里只有精品免费| 国产精品夜夜爽| 国内成人自拍视频| 亚洲美女在线国产| 另类欧美日韩国产在线| 国产偷v国产偷v亚洲高清| 99久久婷婷国产精品综合| 综合色中文字幕| 久久久久久亚洲综合影院红桃| 国产精品亚洲人在线观看| 五月婷婷久久综合| 欧美蜜桃一区二区三区| 日韩成人精品在线观看| 欧美国产日韩亚洲一区| 91看片淫黄大片一级在线观看| 亚洲国产精品久久久久秋霞影院| 欧美一区午夜视频在线观看| 欧美无砖砖区免费| 精品视频一区二区不卡| 国产精品久久网站| 国产福利不卡视频| 精品久久久久久久一区二区蜜臀| 久久精品一区二区三区不卡| 日韩精品一区二区三区老鸭窝| 成人黄色777网| 7878成人国产在线观看| 亚洲一区在线视频观看| 美日韩黄色大片| 欧美性欧美巨大黑白大战| 91久久一区二区| 国产亚洲综合在线| 精品福利视频一区二区三区| 欧美日韩aaa| 国产精品免费aⅴ片在线观看| 久久99国内精品| 亚洲精品va在线观看| 5858s免费视频成人| 国产精品系列在线观看| 日本一区二区电影| 26uuu另类欧美亚洲曰本| 久久精品久久久精品美女| 日本一区二区三区高清不卡| 国产精品91一区二区| 国产精品成人免费| 欧美日韩国产区一| 大白屁股一区二区视频| 日韩黄色小视频| 亚洲天天做日日做天天谢日日欢| 国产精品免费视频一区| 欧美日韩精品欧美日韩精品 | 美国十次综合导航| 色成人在线视频| 中文字幕在线不卡视频| 色一情一乱一乱一91av| 亚洲成a人在线观看| 久久嫩草精品久久久久| 久久国产精品99久久久久久老狼| 欧美日韩精品福利| 国产成人综合亚洲91猫咪| 美女www一区二区| 亚洲伦理在线免费看| 91免费看`日韩一区二区| 日本欧美加勒比视频| 久久不见久久见中文字幕免费| 亚洲免费在线观看| 中文在线免费一区三区高中清不卡| 在线观看成人小视频| av动漫一区二区| 国产成人在线视频网站| 香蕉av福利精品导航| 亚洲一区二区欧美日韩| 国产精品午夜电影| 亚洲成在人线免费| 精品午夜久久福利影院| 一区二区三区四区亚洲| 91香蕉国产在线观看软件| 国产精品天天看| 99re66热这里只有精品3直播 | 久久色在线视频| 亚洲欧洲www| 欧美日韩国产美| 精品av久久707| 色综合久久久久综合99| 国产成人精品aa毛片| 国产欧美1区2区3区| 亚洲天堂a在线| 日韩一区中文字幕| 亚洲va欧美va国产va天堂影院| 极品少妇一区二区| 中文字幕第一区综合| 亚洲色图在线播放| 国产精品高潮久久久久无| 久久国产精品色| 午夜精品久久久久久不卡8050| 亚洲v日本v欧美v久久精品| 一区二区成人在线视频 | 国产婷婷精品av在线| 色成年激情久久综合| 日韩高清国产一区在线| 国产日韩亚洲欧美综合| 91在线观看污| 婷婷亚洲久悠悠色悠在线播放| 欧美一区二区三区播放老司机| 色哟哟国产精品| 色综合色狠狠天天综合色| 欧美日韩在线观看一区二区 | 久久精品视频在线看| 91亚洲永久精品| 国产精品电影一区二区三区| 欧美一级日韩一级| 亚洲精品一区二区三区在线观看 | 欧美色网站导航| 91精品在线一区二区| 懂色av一区二区三区免费看| 精品亚洲免费视频| 国产一区二区久久| 亚洲黄色小视频| 精品国免费一区二区三区| 91麻豆精品国产自产在线| 欧美午夜一区二区三区免费大片| 青青草国产成人av片免费| 国产精品美女久久久久av爽李琼 | 日韩限制级电影在线观看| 欧美专区日韩专区| 亚洲品质自拍视频| 久久久久久久久岛国免费| 26uuu国产电影一区二区| 日韩欧美国产三级电影视频| 成人免费电影视频| 狠狠狠色丁香婷婷综合久久五月| 久久精品二区亚洲w码| 欧美中文字幕一区| 日韩一卡二卡三卡| 国产亚洲短视频| 肉丝袜脚交视频一区二区| 极品少妇xxxx精品少妇偷拍| 中文欧美字幕免费|