Regex中的限定符和元字元:
元字元就是它是一個特殊的字元,可以代表某個字元或某一類字元.限定符就是指某個字元出現的次數
特殊字元 |
意思 |
例子 |
\ |
跟字串的逸出字元一樣,它也用來轉義的. |
比如$是個特殊的字元.要匹配$的話就得用\$ |
^ |
匹配字串的開頭位置 |
^a匹配arwen.但不匹配barwen. |
$ |
匹配字串的末尾位置 |
en$匹配arwen.但不匹配arwenb. |
* |
匹配前面的字元0次或多次 |
a*rwen,表示字母a出現0次或多次.可以匹配rwen或aaarwen. |
+ |
匹配前面的字元1次或多次 |
a+rwen表示字母a出現1次或多次.但不能是0次.可以匹配arwen或aarwen.但不能匹配rwen. |
? |
匹配前面的字元0次或1次 |
a?rwen,表示a出現0次或1次.可以匹配arwen或rwen.但不能匹配aarwen. |
{n} |
匹配前面的字元恰好是n次,其中n是整數 |
ar{2}wen可以匹配arrwen.但不能匹配arwen或arrrwen. |
{n,m} |
匹配前面的字元至少是n次,最多是m次.如果寫成 {n,}表示最少匹配n次.沒有上限. |
ar{1,2}wen可以匹配arwen,arrwen.但不匹配awen或arrrwen. |
. |
點號,匹配除換行以外的任意單個字元.分行符號用\n表示 |
arw.n.可以匹配arwen,arwin.但不能匹配arween或arwn. |
\w |
匹配字元或數字,底線,漢字 |
|
\d |
匹配數字 |
|
\s |
匹配任何空白字元 |
貌似斷行符號符\r和分行符號\n也被算作空白字元. |
\b |
匹配單詞的開關或結尾 |
這個要和^,$匹配字元的開關和結尾區分下.我們是把空格隔開的一串字元當作一個單詞.但字串是整個的一長串字元 |
|
|
|
|
注意: |
特殊字元都區別大小寫,上面的字元全部是小寫 |
表示反義的字元
上面說的字元都是小寫.有些對應的大寫字元就表示相反的意思
\W匹配何意不是字母,數字,底線,漢字的字元.
\S匹配任意不是空白的字元
\D匹配任意不是數位字元
\B匹配不是單詞開始或結束的位置
小括弧,中括弧
中括弧:[] ,它表示裡面的字元任選一個
比如[abcd]+,就表示abcd這四個字母任意的一個出現1次或多次
小括弧()和|結合表示任選一個,其實和[]類似,只不過[]只能任選一個字母,()可以任選一個字串
(abc|def)+表示abc或def這兩個字串中的任一個出現一次或多次.
另一個是^,在上面提到它表示字串開頭,但要把它放到[]中就取反的意思了.
所以^a是匹配a在字元開頭.而[^a]匹配不是字元a的任一字元
還有在[]中用個串連符-表示取值範圍[0-9]表示0到9的任意一個數字[a-z]表示任意小寫字母中的一個
上面說了這麼多規則,那具體怎麼用呢,其實用起來很簡單,難的是你怎麼把上面的規則群組合起來實現你想要的條件
還用之前的例子來說,比如從字串中提取網址
string str ="ahttpp://www.baidu.com/s?tn=sitehao12"; //待提取的源字元
string pattern = @"w{3}\..*\.com"; //這裡就是用上面的規則來表達條件.w就表示字母w,如果加個\變成\w表達的意思就不一樣了,表示數字,字母,底線,漢字了
//然後w{3}表示連續出現3次w字母 \.就表示點號.注意如果前面沒有@則要表示成\\.反正最好記得每次在寡不字串前加個@就不用就考慮再給\轉義了啊.
//.*就表示除分行符號以外的任一字元出現0或多次 \.表示點號 com就表示字元com
string needStr = Regex.Match(str,pattern).Value; //這樣就得到想要的結果了.