正規表示式總結

2021-09-06 03:43:02 字數 3852 閱讀 2160

字串和正規表示式

一、system.string 類

複習前面知識

二、正規表示式

1、引入:在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串的需要。正規表示式就是用於描述這些規則的工具。換句話說,正規表示式就是記錄文字規則的**。

windows/dos下用於檔案查詢的萬用字元(wildcard),也就是*和?。如果你想查詢某個目錄下的所有的

word文件的話,你會搜尋*.doc。在這裡,*會被解釋成任意的字串。和萬用字元類似,正規表示式也是用來進行文字匹配的工具,只不過比起萬用字元,它能更精確地描述你的需求。

2、簡單例子:

**:

1

using

system.text.regularexpressions;

2namespace3

15}

16}

17}

結果:

regexoptions列舉選項:

檢視msdn

3 主要得特定字元或轉義序列

1)元字元

常用元字元:

\s    任何不是空白得字元

\b    不是字邊界得位置

eg:

i.ation 結果為isation iztion

\ba\w*\b匹配以字母a開頭的單詞,然後是任意數量的字母或數字(

\w*),最後是單詞結束處(

\b)。

\b\w\b 匹配剛好6個字母/數字的單詞。

\d+匹配1個或更多連續的數字。

\ba\s*ion\b  ----------表示以a開頭,中間為任意個不是空白的字元,以ion結尾

元字元^(和數字6在同乙個鍵位上的符號)和$都匹配乙個位置,這和\b有點類似。^匹配你要用來查詢的字串的開頭,$匹配結尾。這兩個**在驗證輸入的內容時非常有用,比如乙個**如果要求你填寫的qq號必須為5位到12位數字時,可以使用:^\d$。

2)字元轉義

如果你想查詢元字元本身的話就必須使用字元轉義

c:\\windows匹配c:\windows

需要轉義的還有:

(   )  * + . [  ] ?   |

c#中要想輸出. 不需要轉義

規則:c#中寫正規表示式string pattern = @"unibetter\$com";

引號裡面得東東如果要輸出上面的那些特殊得字元的話,就必須在該字元得前面加上\ 然後前面的@不能掉

3)重複

ra*t   結果為rt rat raat raaat

ra+t   結果為rat raat raaat

ra?t   結果為rt rat

windows\d+匹配windows後面跟1個或更多數字

^\w+匹配一行的第乙個單詞

4)字元類

指定乙個範圍:

像[aeiou]就匹配任何乙個英文母音字母,[.?!]匹配標點符號(.或?或!),像[0-9]代表的含意與\d就是完全一致的:一位數字;同理[a-z0-9a-z_]也完全等同於\w

分析:\(?0\d[) -]?\d

先是乙個轉義字元\

然後是( 後面是?表示( 可以出現0次或1次

再是乙個0 然後後面是接兩個數字  然後[) -]? 表示)或-可以出現一次或0次

最後就是接八個數字

可以出現得情形:(010)33344432

022-34566666

03292929399    (03292929399   032)92929399

(032-92929399

5)分支條件

0\d-\d|0\d-\d這個表示式能匹配兩種以連字型大小分隔的**號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號(0376-2233445)。

\(0\d\)[- ]?\d|0\d[- ]?\d這個表示式匹配3位區號的**號碼,其中區號可以用小括號括起來,也可以不用,區號與本地號間可以用連字型大小或空格間隔,也可以沒有間隔

6)分組

如果想要重複多個字元又可以用小括號來指定子表示式(也叫做分組)

(\d\.)\d是乙個簡單的ip位址匹配表示式。要理解這個表示式,請按下列順序分析它:\d匹配1到3位的數字,(\d\.)匹配三位數字加上乙個英文句號(這個整體也就是這個分組)重複3次,最後再加上乙個一到三位的數字(\d)。

122.2.2.123

7)反義

8)零寬斷言

(?=exp)也叫零寬度正**先行斷言

\b\w+(?=ing\b),匹配以ing結尾的單詞的前面部分(除了ing以外的部分),如查詢i'm singing while you're dancing.時,它會匹配sing和danc

(?<=exp)也叫零寬度正回顧後發斷言,它斷言自身出現的位置的前面能匹配表示式exp。比如(?<=\bre)\w+\b會匹配以re開頭的單詞的後半部分(除了re以外的部分),例如在查詢reading a book時,它匹配ading

零寬度負**先行斷言(?!exp),斷言此位置的後面不能匹配表示式exp

例如:\d(?!\d)匹配三位數字,而且這三位數字的後面不能是數字

(?9.)貪婪與懶惰

a.*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。

a.*?b匹配最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字元)和ab

*為什麼第乙個匹配是aab(第一到第三個字元)而不是ab(第二到第三個字元)?簡單地說,因為正規表示式有另一條規則,比懶惰/貪婪規則的優先順序更高:最先開始的匹配擁有最高的優先權

三、正則在c#中的運用

1

using

system.text.regularexpressions;

2class

program 3

12//

匹配是否存在

13private

static

void

matchexpressions(

string

strstring) 14

20//

匹配,並且返回匹配值

21private

static

void

matchandreturn(

string

strstring) 22

35}

36else

37console.writeline(

"字串中不包含匹配的項

");

38}

39//

替換 40

private

static

void

replaceword(

string

strstring) 41

46//

分割 47

private

static

void

splitword(

string

strstring) 48

55}

56}

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式總結

正規表示式用於操作字串的規則,這些規則由一些符號所組成。使用正規表示式可以進行更複雜的操作,而且這種複雜的操作要比方法短的多。功能 1,匹配。使用的是string類中的matches方法。2,切割。使用的string類split方法。3,替換。4,查詢。1,將正則規則通過pattern類中的stat...

正規表示式總結

常用正規表示式總結 w w w 驗證 號碼 d d d 正確格式為 x x xx x xx x 和 xx 驗證身份證號 15位或18位數字 d d 驗證一年的12個月 0?1 9 1 0 2 正確格式為 01 09 和 1 12 驗證乙個月的31天 0?1 9 1 2 0 9 30 31 正確格式為...