C 正規表示式從入門到精通(一)基礎篇

2021-09-10 01:13:12 字數 4515 閱讀 3016

1、什麼是正規表示式

正規表示式是用來檢驗和操作字串的強大工具。簡單的理解正規表示式可以認為是一種特殊的驗證字串。正規表示式常見運用是驗證使用者輸入資訊格式,比如「\w+@\w+\.\w」,實際上就是驗證郵件位址是否合法的;當然正規表示式不僅僅是用於驗證,可以說只要運用字串的地方都可以使用正規表示式;

2、涉及的基本的類

正規表示式在英文中寫作(regular expression),根據正規表示式的使用範圍和單詞意思,.net將其命名空間設定為system.text.regularexpressions;

在該命名空間內包括了8個基本的類:capture、capturecollection、group、groupcollection、match、matchcollection、regex和regexcompilationinfo

其中:(1)capture 用於單個表示式捕獲結果

(2)capturecollection 用於乙個序列進行字串捕獲 

(3)group 表示單個捕獲的結果 

(4)groupcollection 表示捕獲組的集會 

(5)match 表示匹配單個正規表示式結果 

(6)matchcollection 表示通過迭代方式應用正規表示式到字串中 

(7)regex 表示不可變的正規表示式 

(8)regexcompilationinfo 將編譯正規表示式需要提供資訊 

3、正規表示式基礎知識基本語法

常見語法包括;字元匹配、重複匹配、字元定位、轉義匹配和其他高階語法(字元分組、字元替換和字元決策);

3.1、字元匹配語法:

字元語法語法解釋語法例子

\d匹配數字(0~9)『\d』匹配8,不匹配12

\d匹配非數字『\d』匹配c,不匹配3

\w匹配任意單字元『\w\w』 匹配a3,不匹配@3

\w匹配非單字元『\w』匹配@,不匹配c

\s匹配空白字元『\d\s\d』匹配3 d,不匹配abc

\s匹配非空字元『\s\s\s』匹配a#4,不匹配3 d

.匹配任意字元『....』匹配a$ 5,不匹配換行

[…]匹配括號中任意字元[b-d]匹配b、c、d, 不匹配e

[^…]匹配非括號字元[^b-z]匹配a,不匹配b-z的字元

[ck]匹配包含括號內元素的字元

[^ck]匹配除了ck以外的任意字元

3.2、重複匹配語法:

重複語法語法解釋語法例子

匹配n次字元\d匹配\d\d\d,不匹配\d\d或\d\d\d\d

匹配n次和n次以上\w匹配\w\w和\w\w\w以上,不匹配\w

匹配n次上m次下\s匹配\s,\s\s,\s\s\s,不匹配\s\s\s\s

?匹配0或1次5?匹配5或0,不匹配非5和0

+匹配一次或多次\s+匹配乙個以上\s,不匹配非乙個以上\s

*匹配0次以上\w*匹配0以上\w,不匹配非n*\w

*?重複任意次,但盡可能少重複。

如 "acbacb"  正則  "a.*?b" 只會取到第乙個"acb" 原本可以全部取到但加了限定符後,只會匹配盡可能少的字元 ,而"acbacb"最少字元的結果就是"acb"

+?重複1次或更多次,但盡可能少重複。與上面一樣,只是至少要重複1次。

??重複0次或1次,但盡可能少重複。如 "aaacb" 正則 "a.??b" 只會取到最後的三個字元"acb"。

?重複n到m次,但盡可能少重複。如 "aaaaaaaa"  正則 "a" 因為最少是0次所以取到結果為空。

?重複n次以上,但盡可能少重複。如 "aaaaaaa"  正則 "a" 最少是1次所以取到結果為 "a"。

3.3、字元定位語法:

^定位後面模式開始位置$前面模式位於字串末端\a前面模式開始位置\z前面模式結束位置

\z前面模式結束位置(換行前\b匹配乙個單詞邊界\b匹配乙個非單詞邊界     

\對下乙個字元轉義。比如$是個特殊的字元。要匹配$的話就得用\$|分支條件,如:x|y匹配 x 或 y。

3.4、轉義匹配語法:

「\」+ (實際字元 :\ . * + ? | ( ) ^ $ [ ])例如:\\匹配字元「\」\n匹配換行\r匹配回車\t匹配水平製表符     

\v匹配垂直製表符\f匹配換頁\nnn匹配乙個8進製ascii\xnn匹配乙個16進製制ascii     

\unnnn匹配4個16進製制的uniode\c+大寫字母 匹配ctrl-大寫字母 例如:\cs-匹配ctrl+s

注:在@「」型別的字串裡面輸入雙引號要寫成兩個雙引號並列,如:若想表達:james "wu"要寫成:@"james ""wu"""

3.4其他語法:

(exp)匹配exp,並捕獲文字到自動命名的組裡。(?exp)匹配exp,並捕獲文字到名稱為name的組裡。

(?:exp)匹配exp,不捕獲匹配的文字,也不給此分組分配組號以下為零寬斷言。

(?=exp)匹配exp前面的位置。如 "how are you doing" 正則"(?.+(?=ing))" 這裡取ing前所有的字元,並定義了乙個捕獲分組名字為 "txt" 而"txt"這個組裡的值為"how are you do";

(?<=exp)匹配exp後面的位置。如 "how are you doing" 正則"(?(?<=how).+)" 這裡取"how"之後所有的字元,並定義了乙個捕獲分組名字為 "txt" 而"txt"這個組裡的值為" are you doing";

(?!exp)匹配後面跟的不是exp的位置。如 "123abc" 正則 "\d(?!\d)"匹配3位數字後非數字的結果

(?匹配前面不是exp的位置。如 "abc123 " 正則 "(?

正規表示式詳解 從入門到精通

關於正則 照著打一遍就行了 真的照著從頭到尾敲一遍就會了,前後最多45分鐘 如果想測試自己敲的正則是不是正確,除了程式設計之外,可以在文字編輯器 別用記事本 中 搜尋 然後點中正則匹配 我用的是sublime ctrl f是搜尋 正則 regular 基礎正則 d 匹配乙個數字 0 9 w 匹配乙個...

book 正規表示式從入門到精通

感覺正則能力太差了,每天花乙個小時看看咯。匹配單個字元,匹配多個字元 search 比如 對輸入字串進行測試,看該字串是否存在乙個 號碼或者乙個信用卡號模式。稱為 資料有效性驗證。replace 標識 文件中特定文字,將其全部替換或者刪除。對乙個正規表示式模式 或者 部分模式 兩邊新增圓括號,將導致...

精通正規表示式 1 正規表示式入門

1 能檢查多個檔案,挑出包含重複單詞的行,高亮標記每個重複單詞 使用標準ansi的轉義字元列 同時必須顯示這行文字來自哪個檔案。2 能跨行查詢,即使兩個單詞乙個在某行末尾而另乙個在下一行的開頭,也算重複單詞。3 能進行不區分大小寫的查詢,例如 the the.重複單詞之間可以出現任意數量的空白字元 ...