日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
3分鐘讓你知道什么是VB.NET正則表達(dá)式引擎

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

湯旺網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。創(chuàng)新互聯(lián)公司成立于2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。

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

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

向前查看與向后查看

Perl5引入了兩個強(qiáng)大的正則語法:“向前查看”和“向后查看”。他們也被稱作“零長度斷言”。他們和錨定一樣都是零長度的(所謂零長度即指該正則表達(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)部機(jī)制讓我們把 < <(? <=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)> > ?!癷f”部分可以是向前向后查看表達(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é)者必看

分享題目:3分鐘讓你知道什么是VB.NET正則表達(dá)式引擎
網(wǎng)站路徑:http://www.5511xx.com/article/ccsdosg.html