中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是VB.NET正則表達式

發布時間:2021-12-02 11:12:05 來源:億速云 閱讀:192 作者:小新 欄目:編程語言

這篇文章主要介紹了什么是VB.NET正則表達式,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

1.什么是VB.NET正則表達式

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

2.不同的VB.NET正則表達式引擎

正則表達式引擎是一種可以處理正則表達式的軟件。通常,引擎是更大的應用程序的一部分。在軟件世界,不同的正則表達式并不互相兼容。本教程會集中討論Perl5類型的引擎,因為這種引擎是應用最廣泛的引擎。同時我們也會提到一些和其他引擎的區別。許多近代的引擎都很類似,但不完全一樣。例如.NET正則庫,JDK正則包。

3.文字符號

最基本的正則表達式由單個文字符號組成。如 < > ,它將匹配字符串中***次出現的字符“a”。如對字符串“Jackisaboy”。“J”后的“a”將被匹配。而第二個“a”將不會被匹配。正則表達式也可以匹配第二個“a”,這必須是你告訴正則表達式引擎從***次匹配的地方開始搜索。在文本編輯器中,你可以使用“查找下一個”。在編程語言中,會有一個函數可以使你從前一次匹配的位置開始繼續向后搜索。類似的, <> 會匹配“Aboutcatsanddogs”中的“cat”。這等于是告訴VB.NET正則表達式引擎,找到一個 <> ,緊跟一個 < > ,再跟一個 <> 。要注意,正則表達式引擎缺省是大小寫敏感的。除非你告訴引擎忽略大小寫,否則 <> 不會匹配“Cat”。

特殊字符對于文字字符,有11個字符被保留作特殊用途。他們是:[]\^$. &brvbar;?*+()這些特殊字符也被稱作元字符。如果你想在正則表達式中將這些字符用作文本字符,你需要用反斜杠“\”對其進行換碼(escape)。例如你想匹配“1+1=2”,正確的表達式為 < <1\+1=2> >
需要注意的是, < <1+1=2> > 也是有效的正則表達式。但它不會匹配“1+1=2”,而會匹配“123+111=234”中的“111=2”。因為“+”在這里表示特殊含義(重復1次到多次)。在編程語言中,要注意,一些特殊的字符會先被編譯器處理,然后再傳遞給正則引擎。因此正則表達式 < <1\+2=2> > 在C++中要寫成“1\\+1=2”。為了匹配“C:\temp”,你要用正則表達式 <> 。而在C++中,正則表達式則變成了“C:\\\\temp”。
不可顯示字符可以使用特殊字符序列來代表某些不可顯示字符: < <\t> > 代表Tab(0x09) < <\r> > 代表回車符(0x0D) < <\n> > 代表換行符(0x0A)要注意的是Windows中文本文件使用“\r\n”來結束一行而Unix使用“\n”。

4.VB.NET正則表達式引擎的內部工作機制

知道正則表達式引擎是如何工作的有助于你很快理解為何某個正則表達式不像你期望的那樣工作。有兩種類型的引擎:文本導向(text-directed)的引擎和正則導向(regex-directed)的引擎。JeffreyFriedl把他們稱作DFA和NFA引擎。本文談到的是正則導向的引擎。這是因為一些非常有用的特性,如“惰性”量詞(lazyquantifiers)和反向引用(backreferences),只能在正則導向的引擎中實現。所以毫不意外這種引擎是目前***的引擎。你可以輕易分辨出所使用的引擎是文本導向還是正則導向。如果反向引用或“惰性”量詞被實現,則可以肯定你使用的引擎是正則導向的。你可以作如下測試:將正則表達式 <> 應用到字符串“regexnot”。如果匹配的結果是regex,則引擎是正則導向的。如果結果是regexnot,則是文本導向的。因為正則導向的引擎是“猴急”的,它會很急切的進行表功,報告它找到的***個匹配。

正則導向的引擎總是返回最左邊的匹配這是需要你理解的很重要的一點:即使以后有可能發現一個“更好”的匹配,正則導向的引擎也總是返回最左邊的匹配。當把 <> 應用到“Hecapturedacatfishforhiscat”,引擎先比較 <> 和“H”,結果失敗了。于是引擎再比較 <> 和“e”,也失敗了。直到第四個字符, <> 匹配了“c”。 < > 匹配了第五個字符。到第六個字符 <> 沒能匹配“p”,也失敗了。引擎再繼續從第五個字符重新檢查匹配性。直到第十五個字符開始, <> 匹配上了“catfish”中的“cat”,正則表達式引擎急切的返回***個匹配的結果,而不會再繼續查找是否有其他更好的匹配。

5.字符集

字符集是由一對方括號“[]”括起來的字符集合。使用字符集,你可以告訴正則表達式引擎僅僅匹配多個字符中的一個。如果你想匹配一個“a”或一個“e”,使用 < <[ae]> > 。你可以使用 <> 匹配gray或grey。這在你不確定你要搜索的字符是采用美國英語還是英國英語時特別有用。相反, <> 將不會匹配graay或graey。字符集中的字符順序并沒有什么關系,結果都是相同的。你可以使用連字符“-”定義一個字符范圍作為字符集。 < <[0-9]> > 匹配0到9之間的單個數字。你可以使用不止一個范圍。 < <[0-9a-fA-F]> > 匹配單個的十六進制數字,并且大小寫不敏感。你也可以結合范圍定義與單個字符定義。 < <[0-9a-fxA-FX]> > 匹配一個十六進制數字或字母X。再次強調一下,字符和范圍定義的先后順序對結果沒有影響。

字符集的一些應用查找一個可能有拼寫錯誤的單詞,比如 <> 或 <> 。查找程序語言的標識符, < > 。(*表示重復0或多次)查找C風格的十六進制數 < <0[xX][A-Fa-f0-9]+> > 。(+表示重復一次或多次)
取反字符集在左方括號“[”后面緊跟一個尖括號“^”,將會對字符集取反。結果是字符集將匹配任何不在方括號中的字符。不像“.”,取反字符集是可以匹配回車換行符的。需要記住的很重要的一點是,取反字符集必須要匹配一個字符。 < > 并不意味著:匹配一個q,后面沒有u跟著。它意味著:匹配一個q,后面跟著一個不是u的字符。所以它不會匹配“Iraq”中的q,而會匹配“Iraqisacountry”中的q和一個空格符。事實上,空格符是匹配中的一部分,因為它是一個“不是u的字符”。如果你只想匹配一個q,條件是q后面有一個不是u的字符,我們可以用后面將講到的向前查看來解決。

字符集中的元字符需要注意的是,在字符集中只有4個字符具有特殊含義。它們是:“]\^-”。“]”代表字符集定義的結束;“\”代表轉義;“^”代表取反;“-”代表范圍定義。其他常見的元字符在字符集定義內部都是正常字符,不需要轉義。例如,要搜索星號*或加號+,你可以用 < <[+*]> > 。當然,如果你對那些通常的元字符進行轉義,你的正則表達式一樣會工作得很好,但是這會降低可讀性。在字符集定義中為了將反斜杠“\”作為一個文字字符而非特殊含義的字符,你需要用另一個反斜杠對它進行轉義。 < <[\\x]> > 將會匹配一個反斜杠和一個X。“]^-”都可以用反斜杠進行轉義,或者將他們放在一個不可能使用到他們特殊含義的位置。我們推薦后者,因為這樣可以增加可讀性。比如對于字符“^”,將它放在除了左括號“[”后面的位置,使用的都是文字字符含義而非取反含義。如 < <[x^]> > 會匹配一個x或^。 < <[]x]> > 會匹配一個“]”或“x”。 < <[-x]> > 或 < <[x-]> > 都會匹配一個“-”或“x”。

字符集的簡寫因為一些字符集非常常用,所以有一些簡寫方式。 < <\d> > 代表 < <[0-9]> > ; < <\w> > 代表單詞字符。這個是隨正則表達式實現的不同而有些差異。絕大多數的正則表達式實現的單詞字符集都包含了 < > 。 < <\s> > 代表“白字符”。這個也是和不同的實現有關的。在絕大多數的實現中,都包含了空格符和Tab符,以及回車換行符 < <\r\n> > 。字符集的縮寫形式可以用在方括號之內或之外。 < <\s\d> > 匹配一個白字符后面緊跟一個數字。 < <[\s\d]> > 匹配單個白字符或數字。 < <[\da-fA-F]> > 將匹配一個十六進制數字。取反字符集的簡寫 < <[\S]> > = < <[^\s]> > < <[\W]> > = < <[^\w]> > < <[\D]> > = < <[^\d]> >
字符集的重復如果你用“?*+”操作符來重復一個字符集,你將會重復整個字符集。而不僅是它匹配的那個字符。正則表達式 < <[0-9]+> > 會匹配837以及222。如果你僅僅想重復被匹配的那個字符,可以用向后引用達到目的。我們以后將講到向后引用。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“什么是VB.NET正則表達式”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

刚察县| 韩城市| 方山县| 桐庐县| 石棉县| 嘉鱼县| 信宜市| 岳池县| 郴州市| 萝北县| 泸西县| 封开县| 富裕县| 八宿县| 宾阳县| 民和| 汉川市| 武陟县| 九龙城区| 滁州市| 中方县| 平昌县| 杭锦旗| 莆田市| 丹棱县| 甘谷县| 芒康县| 定结县| 崇州市| 噶尔县| 云浮市| 盐津县| 吉首市| 福清市| 青海省| 镇康县| 山东省| 松阳县| 怀安县| 海丰县| 高雄县|