成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

3分鐘讓你知道什么是VB.NET正則表達(dá)式引擎

開發(fā) 后端
大家知道VB.NET正則表達(dá)式引擎嗎?在這里給大家介紹什么是正則表達(dá)式。讓我們更進(jìn)一步了解VB.NET正則表達(dá)式引擎內(nèi)部機制讓我們把 < <(? <=a)b> > 應(yīng)用到“thingamabob”。

本人很喜歡VB.NET正則表達(dá)式引擎,在工作中也很喜歡總結(jié)關(guān)于VB.NET正則表達(dá)式的經(jīng)驗教訓(xùn),下面就這個問題來詳細(xì)說說吧。

什么是正則表達(dá)式

基本說來,正則表達(dá)式是一種用來描述一定數(shù)量文本的模式。Regex代表RegularExpress。本文將用 < > 來表示一段具體的正則表達(dá)式。一段文本就是最基本的模式,簡單的匹配相同的文本。

向前查看與向后查看

Perl5引入了兩個強大的正則語法:“向前查看”和“向后查看”。他們也被稱作“零長度斷言”。他們和錨定一樣都是零長度的(所謂零長度即指該正則表達(dá)式不消耗被匹配的字符串)。不同之處在于“前后查看”會實際匹配字符,只是他們會拋棄匹配只返回匹配結(jié)果:匹配或不匹配。這就是為什么他們被稱作“斷言”。他們并不實際消耗字符串中的字符,而只是斷言一個匹配是否可能。幾乎本文討論的所有正則表達(dá)式的實現(xiàn)都支持“向前向后查看”。唯一的一個例外是Javascript只支持向前查看。

肯定和否定式的向前查看如我們前面提過的一個例子:要查找一個q,后面沒有緊跟一個u。也就是說,要么q后面沒有字符,要么后面的字符不是u。采用否定式向前查看后的一個解決方案為 < > 。否定式向前查看的語法是 < <(?!查看的內(nèi)容)> > 。肯定式向前查看和否定式向前查看很類似: < <(?=查看的內(nèi)容)> > 。如果在“查看的內(nèi)容”部分有組,也會產(chǎn)生一個向后引用。但是向前查看本身并不會產(chǎn)生向后引用,也不會被計入向后引用的編號中。這是因為向前查看本身是會被拋棄掉的,只保留匹配與否的判斷結(jié)果。如果你想保留匹配的結(jié)果作為向后引用,你可以用 < <(?=(regex))> > 來產(chǎn)生一個向后引用。

肯定和否定式的先后查看向后查看和向前查看有相同的效果,只是方向相反否定式向后查看的語法是: < <(? > 肯定式向后查看的語法是: < <(? <=查看內(nèi)容)> > 我們可以看到,和向前查看相比,多了一個表示方向的左尖括號。例: < <(? > 將會匹配一個沒有“a”作前導(dǎo)字符的“b”。值得注意的是:向前查看從當(dāng)前字符串位置開始對“查看”正則表達(dá)式進(jìn)行匹配;向后查看則從當(dāng)前字符串位置開始先后回溯一個字符,然后再開始對“查看”正則表達(dá)式進(jìn)行匹配。

深入VB.NET正則表達(dá)式引擎內(nèi)部讓我們看一個簡單例子。把正則表達(dá)式 < > 應(yīng)用到字符串“Iraq”。正則表達(dá)式的第一個符號是 < > 。正如我們知道的,引擎在匹配 < > 以前會掃過整個字符串。當(dāng)?shù)谒膫€字符“q”被匹配后,“q”后面是空字符(void)。而下一個正則符號是向前查看。引擎注意到已經(jīng)進(jìn)入了一個向前查看正則表達(dá)式部分。下一個正則符號是 < > ,和空字符不匹配,從而導(dǎo)致向前查看里的正則表達(dá)式匹配失敗。因為是一個否定式的向前查看,意味著整個向前查看結(jié)果是成功的。于是匹配結(jié)果“q”被返回了。我們在把相同的正則表達(dá)式應(yīng)用到“quit”。 < > 匹配了“q”。下一個正則符號是向前查看部分的 < > ,它匹配了字符串中的第二個字符“i”。引擎繼續(xù)走到下個字符“i”。然而引擎這時注意到向前查看部分已經(jīng)處理完了,并且向前查看已經(jīng)成功。于是引擎拋棄被匹配的字符串部分,這將導(dǎo)致引擎回退到字符“u”。因為向前查看是否定式的,意味著查看部分的成功匹配導(dǎo)致了整個向前查看的失敗,因此引擎不得不進(jìn)行回溯。最后因為再沒有其他的“q”和 < > 匹配,所以整個匹配失敗了。為了確保你能清楚地理解向前查看的實現(xiàn),讓我們把 < > 應(yīng)用到“quit”。 < > 首先匹配“q”。然后向前查看成功匹配“u”,匹配的部分被拋棄,只返回可以匹配的判斷結(jié)果。引擎從字符“i”回退到“u”。由于向前查看成功了,引擎繼續(xù)處理下一個正則符號 < > 。結(jié)果發(fā)現(xiàn) < > 和“u”不匹配。因此匹配失敗了。由于后面沒有其他的“q”,整個正則表達(dá)式的匹配失敗了。

更進(jìn)一步理解VB.NET正則表達(dá)式引擎內(nèi)部機制讓我們把 < <(? <=a)b> > 應(yīng)用到“thingamabob”。引擎開始處理向后查看部分的正則符號和字符串中的第一個字符。在這個例子中,向后查看告訴VB.NET正則表達(dá)式引擎回退一個字符,然后查看是否有一個“a”被匹配。因為在“t”前面沒有字符,所以引擎不能回退。因此向后查看失敗了。引擎繼續(xù)走到下一個字符“h”。再一次,引擎暫時回退一個字符并檢查是否有個“a”被匹配。結(jié)果發(fā)現(xiàn)了一個“t”。向后查看又失敗了。向后查看繼續(xù)失敗,直到正則表達(dá)式到達(dá)了字符串中的“m”,于是肯定式的向后查看被匹配了。因為它是零長度的,字符串的當(dāng)前位置仍然是“m”。下一個正則符號是 < > ,和“m”匹配失敗。下一個字符是字符串中的第二個“a”。引擎向后暫時回退一個字符,并且發(fā)現(xiàn) < > 不匹配“m”。在下一個字符是字符串中的第一個“b”。引擎暫時性的向后退一個字符發(fā)現(xiàn)向后查看被滿足了,同時 < > 匹配了“b”。因此整個正則表達(dá)式被匹配了。作為結(jié)果,正則表達(dá)式返回字符串中的第一個“b”。

向前向后查看的應(yīng)用我們來看這樣一個例子:查找一個具有6位字符的,含有“cat”的單詞。首先,我們可以不用向前向后查看來解決問題,例如: < > 足夠簡單吧!但是當(dāng)需求變成查找一個具有6-12位字符,含有“cat”,“dog”或“mouse”的單詞時,這種方法就變得有些笨拙了。我們來看看使用向前查看的方案。在這個例子中,我們有兩個基本需求要滿足:一是我們需要一個6位的字符,二是單詞含有“cat”。滿足第一個需求的正則表達(dá)式為 < <\b\w{6}\b> > 。滿足第二個需求的正則表達(dá)式為 < <\b\w*cat\w*\b> > 。把兩者結(jié)合起來,我們可以得到如下的正則表達(dá)式: < <(?=\b\w{6}\b)\b\w*cat\w*\b> > 具體的匹配過程留給讀者。但是要注意的一點是,向前查看是不消耗字符的,因此當(dāng)判斷單詞滿足具有6個字符的條件后,引擎會從開始判斷前的位置繼續(xù)對后面的正則表達(dá)式進(jìn)行匹配。最后作些優(yōu)化,可以得到下面的正則表達(dá)式: < <\b(?=\w{6}\b)\w{0,3}cat\w*> > .正則表達(dá)式中的條件測試條件測試的語法為 < <(?ifthen ¦else)> > 。“if”部分可以是向前向后查看表達(dá)式。如果用向前查看,則語法變?yōu)椋?< <(?(?=regex)then ¦else)> > ,其中else部分是可選的。如果if部分為true,則正則引擎會試圖匹配then部分,否則引擎會試圖匹配else部分。需要記住的是,向前先后查看并不實際消耗任何字符,因此后面的then與else部分的匹配時從if測試前的部分開始進(jìn)行嘗試。16.為正則表達(dá)式添加注釋在正則表達(dá)式中添加注釋的語法是: < <(?#comment)> > 例:為用于匹配有效日期的正則表達(dá)式添加注釋:(?#year)(19 ¦20)\d\d[-/.](?#month)(0[1-9] ¦1[012])[-/.](?#day)(0[1-9] ¦[12][0-9] ¦3[01])

【編輯推薦】

  1. 剖析VB.NET平臺調(diào)用是如何執(zhí)行操作
  2. 分享個人總結(jié)VB.NET多線程
  3. 詳細(xì)說明VB.NET變量中四點
  4. 三類十二種VB.NET數(shù)據(jù)類型全面介紹
  5. VB.NET初步知識,初學(xué)者必看
責(zé)任編輯:田樹 來源: 樂博網(wǎng)
相關(guān)推薦

2009-10-26 16:12:19

VB.NET正則表達(dá)式

2009-10-26 15:33:27

VB.NET正則表達(dá)式

2010-01-07 13:29:00

VB.NET正則表達(dá)式

2009-10-28 09:02:41

VB.NET開發(fā)正則表

2009-10-26 16:01:03

VB.NET正則表達(dá)式

2009-10-27 10:14:54

VB.NET正則表達(dá)式

2017-08-10 13:13:44

Linux正則表達(dá)式

2009-11-02 17:24:57

VB.NET語言

2009-09-16 17:15:57

正則表達(dá)式引擎

2009-11-17 10:13:29

PHP正則表達(dá)式

2009-11-10 16:27:45

VB.NET指針

2009-10-27 09:17:26

VB.NET生成靜態(tài)頁

2009-10-30 13:12:40

VB.NET創(chuàng)建類

2009-10-21 18:19:36

VB.NET實現(xiàn)拖放

2009-10-26 15:45:43

VB.NET類構(gòu)造

2009-08-07 14:24:31

.NET正則表達(dá)式

2009-11-04 13:12:33

VB.NET面向?qū)ο缶?/a>

2012-05-08 13:29:01

VB

2010-01-07 15:29:59

VB.NET表達(dá)式

2009-11-03 11:01:45

VB.NET遠(yuǎn)程事件
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品视频入口 | 91tv在线观看 | 久婷婷 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 超碰精品在线观看 | 一本综合久久 | 亚洲精品国产精品国自产在线 | 在线成人免费av | 电影91久久久 | 狠狠爱网址 | 久久中文视频 | 国产乱码精品1区2区3区 | 极品电影院 | 久久99精品久久久97夜夜嗨 | 日韩精品免费视频 | 男人天堂手机在线视频 | 视频在线一区 | 黑人粗黑大躁护士 | 久久精品国产免费 | 中文字幕成人网 | 91九色porny首页最多播放 | 久久99精品久久久久蜜桃tv | 五月综合激情在线 | 国产免费一区二区 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 免费精品 | 亚洲一区在线播放 | 欧美午夜一区二区三区免费大片 | 在线播放国产一区二区三区 | 日韩一级二级片 | 久久国产精彩视频 | 成人三级网址 | 日本高清视频在线播放 | 欧美区日韩区 | 欧美性受| 午夜影视| 日韩在线免费看 | 欧美在线视频一区二区 | 精品国产乱码一区二区三区a | 91精品国产乱码麻豆白嫩 | 欧美激情久久久 |