本文整理C#正規表示式的元字符,正規表示式是由字符構成的表達式,每個字符代表一個規則,表達式中的字符分為兩種類型:普通字符和元字符。普通字符是指字面含義不變的字符,按照完全匹配的方式匹配文本,而元字符具有特殊的含義,代表一類字符。
把文字看作是字元流,每個字元放在一個位置上,例如,正規表示式“Room\d\d\d”,前面四個字符Room是普通字符,後面的字符\是轉義字符,和後面的字符d組成一個元字符\d,表示該位置上有任意一個數字。
用正規表示式的語言來描述是:正規表示式 「Room\d\d\d」共捕獲7個字符,表示「以Room開頭、以三個數字結尾」的一類字串,我們把這一類字串稱作一個模式(Pattern),也稱作是一個正則。
一,轉義字符
轉義字符是\,把普通字符轉義為具有特殊含義的元字符,常用的轉義字元有:
-
\t
:水平製表符 -
\v
:垂直製表符 -
\r
:回車 -
\n
:換行 -
\\
:表示字元\,也就說,把轉義字元\ 轉義為普通的字元\ -
\"
:表示字元",在C#中,雙引號用於定義字串,字串包含的雙引號用\" 來表示
二,字元類別
在進行正規比對時,把輸入文字看成有順序的字符流,字符類元字符匹配的對像是字符,並會捕獲字符。所謂捕獲字符是指,一個元字符捕獲的字符,不會被其他元字符匹配,後續的元字符只能從剩下的文字中重新匹配。
常用的字元類別元字元:
-
#[ char_group]
:匹配字元組中的任一個字元 -
[^char_group]
:符合字元組以外的任一字元 -
[first-last]
:符合從first到last的字元範圍中的任一個字符,字符範圍包括first和last。 -
.
:通配符,匹配除\n之外的任意一個字符 - ##\w
:匹配任一個單字(word)字符,單字字符通常是指A-Z、a-z和0-9
- \W
:匹配任意一個非單字字符,是指除A-Z 、a-z和0-9以外的字元
- \s
:符合任一個空白字元
- \S
:符合任一個非空白字元
- \d
:符合任一個數字字元
- \D
:符合任一個非數字字元
三,定位符##定位符匹配(或捕獲)的對像是位置,它根據字符的位置來判斷模式匹配是否成功,定位符不會捕獲字符,是零寬的(寬度為0),常用的定位符有:
- ^
- :預設情況下,符合字串的起始位置;在多行模式下,符合每行的開始位置;
- #:預設情況下,符合字串的結束位置,或字串結尾的\n之前的位置;在多行模式下,符合每行結束之前的位置,或每行結尾的\n之前的位置。
- :符合字串的起始位置;
- :符合字串的結束位置,或字串結尾的\n之前的位置;
- :符合字串的結束位置;
- :符合上一個符合結束的位置;
- :符合一個單字的開始或結束的位置;
- :符合一個單字的中間位置;
四,量詞、貪婪與懶惰量詞是指限定前面的一個正規出現的次數,量詞分為兩種模式:貪婪模式和懶惰模式,貪婪模式是指匹配盡可能多的字符,而懶惰模式是指匹配盡可能少的字符。預設情況下,量詞處於貪婪模式,在量詞的後面加上?來啟用懶惰模式。
-
*
:出現0次或多次 -
- ##?
#:出現0次或1次
- {n}
:出現n次
- {n,}
:出現至少n次
- {n,m}
:出現n到m次
五,分組和捕捉字元
() 括號不僅決定表達式的範圍,還建立分組,()內的表達式就是一個分組,引用分組表示兩個分組匹配的文字是完全相同的。定義一個分組的基本語法:(#該類型的分組會捕獲字符,所謂捕獲字符是指:一個元字符捕獲的字符,不會被其他元字符匹配,後續的元字符只能從剩餘的文本中重新匹配。pattern)
1,分組編號和命名
預設情況下,每個分組自動分配一個組號,規則是:從左向右,按分組左括號的出現順序進行編號,第一個分組的組號為1,第二個為2,以此類推。也可以為分組指定名稱,該分組稱為命名分組,命名分組也會被自動編號,編號從1開始,逐一加1,為分組指定名稱的語法是:通常來說,分組分為命名分組和編號分組,引用分組的方式有:(? name >
pattern)
- 透過分組名稱來引用分組:\k
- 透過分組編號來引用分組:\ number
valid
,在引用分組時,分組對應的文本是完全相同的。2,分組建構器
分組建構方法如下:- (pattern)
:捕捉符合的子表達式,並為分組分配一個組號
- (? pattern):將匹配的子表達式捕獲到命名的分組中
- #(?:pattern):非捕獲的分組,並未分組分配一個組號
- #(?> pattern):貪婪分組
3,貪婪分組
貪婪分組也稱作非回溯分組,該分組禁用了回溯,正則表達式引擎將盡可能匹配輸入文本中的字元。如果無法進行進一步的匹配,則不會回溯嘗試進行其他模式匹配。(?> pattern )
#4,二選一
##| 的意思是或,配對兩者中的任一個,注意,|
把左右兩邊的表達式分成兩部分。 <pre class="brush:php;toolbar:false">pattern1 | pattern2</pre>
六,零寬斷言#零寬是指寬度為0,符合的是位置,所以符合的子字串不會出現在配對結果中,而斷言是指判斷的結果,只有斷言為真,才算匹配成功。
對於定位符,可以匹配一句話的開始、結束(^ $)或匹配一個單字的開始、結束(\b),這些元字元只匹配一個位置,指定這個位置滿足一定的條件,而不是匹配某些字符,因此,它們被成為零寬斷言。所謂零寬,指的是它們不與任何字符相匹配,而匹配一個位置;所謂斷言,指的是一個判斷,正則表達式中只有當斷言為真時才會繼續進行匹配。零寬斷言可以精確的匹配一個位置,而不僅僅是簡單的指定句子或單字。
正規表示式把文字看作從左向右的字元流,向右叫做後向(Look behind),向左叫做前向(Look ahead)。對於正規表示式,只有當匹配到指定的模式(Pattern)時,斷言為True,叫做肯定式,把不匹配模式為True,叫做否定式。
依照符合的方向和配對的定性,把零寬斷言分成四種:
-
(?=
pattern):前向、肯定断言
-
(?!
pattern):前向、否定断言
(? pattern<code>):后向、肯定断言
(? pattern<code>):后向、否定断言
1,前向肯定断言
前向肯定断言定义一个模式必须存在于文本的末尾(或右侧),但是该模式匹配的子串不会出现在匹配的结果中,前向断言通常出现在正则表达式的右侧,表示文本的右侧必须满足特定的模式:
(?=
subexpression)
使用前向肯定断言可以定一个模糊匹配,后缀必须包含特定的字符:
\b\w+(?=\sis\b)
对正则表达式进行分析:
-
\b
:表示单词的边界 -
\w
+:表示单词至少出现一次 -
(?=\sis\b)
:前向肯定断言,\s 表示一个空白字符, is 是普通字符,完全匹配,\b 是单词的边界。
从分析中,可以得出,匹配该正则表达式的文本中必须包含 is 单词,is是一个单独的单词,不是某一个单词的一个部分。举个例子
Sunday is a weekend day 匹配该正则,匹配的值是Sunday,而The island has beautiful birds 不匹配该正则。
2,后向肯定断言
后向肯定断言定义一个模式必须存在于文本的开始(或左侧),但是该模式匹配的子串不会出现在匹配的结果中,后向断言通常出现在正则表达式的左侧,表示文本的左侧必须满足特定的模式:
(?<p>使用后向肯定断言可以定一个模糊匹配,前缀必须包含特定的字符:</p><pre class="brush:php;toolbar:false">(?<p>对正则表达式进行分析:</p>
(?:后向断言,\b表示单词的开始,20是普通字符
-
\d{2}
:表示两个数字,数字不要求相同 -
\b
:单词的边界
该正则表达式匹配的文本具备的模式是:文本以20开头、以两个数字结尾。
推荐学习:C#.Net教程
以上是C#之正規表示式介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

C#和.NET提供了強大的功能和高效的開發環境。 1)C#是一種現代、面向對象的編程語言,結合了C 的強大和Java的簡潔性。 2).NET框架是一個用於構建和運行應用程序的平台,支持多種編程語言。 3)C#中的類和對像是面向對象編程的核心,類定義數據和行為,對像是類的實例。 4).NET的垃圾回收機制自動管理內存,簡化開發者的工作。 5)C#和.NET提供了強大的文件操作功能,支持同步和異步編程。 6)常見錯誤可以通過調試器、日誌記錄和異常處理來解決。 7)性能優化和最佳實踐包括使用StringBuild

.NETFramework是一個跨語言、跨平台的開發平台,提供一致的編程模型和強大的運行時環境。 1)它由CLR和FCL組成,CLR管理內存和線程,FCL提供預構建功能。 2)使用示例包括讀取文件和LINQ查詢。 3)常見錯誤涉及未處理異常和內存洩漏,需使用調試工具解決。 4)性能優化可通過異步編程和緩存實現,保持代碼可讀性和可維護性是關鍵。

C#.NET保持持久吸引力的原因包括其出色的性能、豐富的生態系統、強大的社區支持和跨平台開發能力。 1)性能表現優異,適用於企業級應用和遊戲開發;2).NET框架提供了廣泛的類庫和工具,支持多種開發領域;3)擁有活躍的開發者社區和豐富的學習資源;4).NETCore實現了跨平台開發,擴展了應用場景。

C#.NET中的設計模式包括Singleton模式和依賴注入。 1.Singleton模式確保類只有一個實例,適用於需要全局訪問點的場景,但需注意線程安全和濫用問題。 2.依賴注入通過注入依賴提高代碼靈活性和可測試性,常用於構造函數注入,但需避免過度使用導致複雜度增加。

C#.NET在現代世界中廣泛應用於遊戲開發、金融服務、物聯網和雲計算等領域。 1)在遊戲開發中,通過Unity引擎使用C#進行編程。 2)金融服務領域,C#.NET用於開發高性能的交易系統和數據分析工具。 3)物聯網和雲計算方面,C#.NET通過Azure服務提供支持,開發設備控制邏輯和數據處理。

C#.NET開發者社區提供了豐富的資源和支持,包括:1.微軟的官方文檔,2.社區論壇如StackOverflow和Reddit,3.GitHub上的開源項目,這些資源幫助開發者從基礎學習到高級應用,提升編程技能。

C#.NET的優勢包括:1)語言特性,如異步編程簡化了開發;2)性能與可靠性,通過JIT編譯和垃圾回收機制提升效率;3)跨平台支持,.NETCore擴展了應用場景;4)實際應用廣泛,從Web到桌面和遊戲開發都有出色表現。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

WebStorm Mac版
好用的JavaScript開發工具