字串和正規表示式
一、system.string 類
複習前面知識
二、正規表示式
1、引入:在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串的需要。正規表示式就是用於描述這些規則的工具。換句話說,正規表示式就是記錄文字規則的**。
windows/dos下用於檔案查詢的萬用字元(wildcard),也就是*和?。如果你想查詢某個目錄下的所有的
word文件的話,你會搜尋*.doc。在這裡,*會被解釋成任意的字串。和萬用字元類似,正規表示式也是用來進行文字匹配的工具,只不過比起萬用字元,它能更精確地描述你的需求。
2、簡單例子:
**:
1using
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#中的運用
1using
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 正確格式為...