搜尋
首頁後端開發C#.Net教程C#之正規表示式介紹

C#之正規表示式介紹

Nov 23, 2019 pm 05:15 PM
c#正規表示式

本文整理C#正規表示式的元字符,正規表示式是由字符構成的表達式,每個字符代表一個規則,表達式中的字符分為兩種類型:普通字符和元字符。普通字符是指字面含義不變的字符,按照完全匹配的方式匹配文本,而元字符具有特殊的含義,代表一類字符。

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之前的位置。
  • \A
  • :符合字串的起始位置;
  • \Z
  • :符合字串的結束位置,或字串結尾的\n之前的位置;
  • \z
  • :符合字串的結束位置;
  • \G
  • :符合上一個符合結束的位置;
  • \b
  • :符合一個單字的開始或結束的位置;
  • #\B
  • :符合一個單字的中間位置;
  •  

四,量詞、貪婪與懶惰量詞是指限定前面的一個正規出現的次數,量詞分為兩種模式:貪婪模式和懶惰模式,貪婪模式是指匹配盡可能多的字符,而懶惰模式是指匹配盡可能少的字符。預設情況下,量詞處於貪婪模式,在量詞的後面加上?來啟用懶惰模式。

  • *:出現0次或多次
  • :出現1次或多次
  • ##?#:出現0次或1次
  • {n}:出現n次
  • {n,}:出現至少n次
  • {n,m}:出現n到m次
注意,出現多次是指前面的元字元出現多次,例如,\d {2} 等價於\d\d,只是出現兩個數字,並不要求兩個數字是相同的。要表示相同的兩個數字,必須使用分組來實現。

五,分組和捕捉​​字元

()  括號不僅決定表達式的範圍,還建立分組,()內的表達式就是一個分組,引用分組表示兩個分組匹配的文字是完全相同的。定義一個分組的基本語法:

(

pattern)

#該類型的分組會捕獲字符,所謂捕獲字符是指:一個元字符捕獲的字符,不會被其他元字符匹配,後續的元字符只能從剩餘的文本中重新匹配。

1,分組編號和命名

預設情況下,每個分組自動分配一個組號,規則是:從左向右,按分組左括號的出現順序進行編號,第一個分組的組號為1,第二個為2,以此類推。也可以為分組指定名稱,該分組稱為命名分組,命名分組也會被自動編號,編號從1開始,逐一加1,為分組指定名稱的語法是:

(? name > pattern)

通常來說,分組分為命名分組和編號分組,引用分組的方式有:

    透過分組名稱來引用分組:\k
  • 透過分組編號來引用分組:\ number
注意,分組只能後向引用,也就是說,從正規表示式文字的左邊開始,分組必須先定義,然後才能在定義之後面引用。

在正規表示式裡引用分組的語法為“\number”,例如“\1”代表與分組1 匹配的子字串,“\2”代表與分組2 匹配的字符串,以此類推。

例如,對於 ".*?\1>" 可以匹配 

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中文網其他相關文章!

陳述
本文轉載於:cnblogs。如有侵權,請聯絡admin@php.cn刪除
使用C#.NET開發:實用指南和示例使用C#.NET開發:實用指南和示例May 12, 2025 am 12:16 AM

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

C#.NET:了解Microsoft .NET框架C#.NET:了解Microsoft .NET框架May 11, 2025 am 12:17 AM

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

c#.net的壽命:其持久流行的原因c#.net的壽命:其持久流行的原因May 10, 2025 am 12:12 AM

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

掌握C#.NET設計模式:從單胎到依賴注入掌握C#.NET設計模式:從單胎到依賴注入May 09, 2025 am 12:15 AM

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

現代世界中的C#.NET:應用和行業現代世界中的C#.NET:應用和行業May 08, 2025 am 12:08 AM

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

C#.NET開發人員社區:資源和支持C#.NET開發人員社區:資源和支持May 06, 2025 am 12:11 AM

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

C#.NET優勢:功能,好處和用例C#.NET優勢:功能,好處和用例May 05, 2025 am 12:01 AM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

熱工具

SecLists

SecLists

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

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

SublimeText3 英文版

SublimeText3 英文版

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

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具