標籤:blog http io os 使用 ar strong for div
C#regex是Regex類
用於string的處理,尋找匹配的字串。
1,先看一個例子
Regex regex=new Regex(@”OK“);//我們要在目標字串中找到"OK"
Match m=regex.Match("fjsladfOK");
console.writeline(m.tostring());//這是尋找OK
//結果是:OK
2,
Regex regex=new Regex(@"\d+");// \d+是代表數字
Match m=regex.Math("jflsadkj 98");
console.writeline(m.tostring);//結果為98
3,關鍵為如何寫特殊字元
”\w+"代表字母 "\W+"代表字元 "\s+" 代表空格 "$"代表字串結束了
4,
關於零寬度斷言有多種叫法,也有叫環視、也有叫預搜尋的,我這裡採用的是 MSDN 中的叫法,關於零寬度斷言有以下幾種:
(?= 子運算式 ): 零寬度正預測先行斷言。僅當子運算式在此位置的右側匹配時才繼續匹配。例如, 19(?=99) 與跟在 99 前面的 19 執行個體匹配。
(?! 子運算式 ): 零寬度負預測先行斷言。僅當子運算式不在此位置的右側匹配時才繼續匹配。例如, (?!99) 與不以99 結尾的單詞匹配,所以不與 1999 匹配。
(?<= 子運算式 ): 零寬度正回顧後發斷言。僅當子運算式在此位置的左側匹配時才繼續匹配。例如, (?<=19)99與跟在 19 後面的 99 的執行個體匹配。此構造不會回溯。
(?<! 子運算式 ): 零寬度負回顧後發斷言。僅當子運算式不在此位置的左側匹配時才繼續匹配。例如 (?<!19) 與不以 19 開頭的單詞匹配,所以不與 1999 匹配。
eg:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace Regex
{
class Program
{
static void Main(string[] args)
{
string p = @"(^\[)([a-z]{1})(\d+)([a-z])(\s+)(?=\])";
string text = "[s434b ]jf";
Regex regex = new Regex(p, RegexOptions.IgnoreCase);
MatchCollection mc = regex.Matches(text);
foreach (Match ma in mc)
{
for (int k = 0; k < ma.Groups.Count; k++)
{
Console.WriteLine("match groud{0} :{1}", k, ma.Groups[k].Value);
}
}
Console.Read();
}
}
}
搜尋出來的結果並沒有“】” ,所以這個就說明“零寬度斷言”僅僅是個條件
5,
Regex元字元
Regex語言由兩種基底字元類型組成:原義(正常)文本字元和元字元。元字元使Regex具有處理 能力。元字元既可以是放在 [] 中的任意單個字元(如 [a] 表示匹配單個小寫字元 a ),也可以是字元序列(如 [a-d] 表示匹配 a 、 b 、 c 、 d 之間的任意一個字元,而 \w 表示任意英文字母和數字及底線),下面是一些常見的元字元:
|
元字元 |
說明 |
|
. |
匹配除 \n 以外的任何字元(注意元字元是小數點)。 |
|
[abcde] |
匹配 abcde 之中的任意一個字元 |
|
[a-h] |
匹配 a 到 h 之間的任意一個字元 |
|
[^fgh] |
不與 fgh 之中的任意一個字元匹配 |
|
\w |
匹配大小寫英文字元及數字 0 到 9 之間的任意一個及底線,相當於 [a-zA-Z0-9_] |
|
\W |
不匹配大小寫英文字元及數字 0 到 9 之間的任意一個,相當於 [^a-zA-Z0-9_] |
|
\s |
匹配任何空白字元,相當於 [ \f\n\r\t\v] |
|
\S |
匹配任何非空白字元,相當於 [^\s] |
|
\d |
匹配任何 0 到 9 之間的單個數字,相當於 [0-9] |
|
\D |
不匹配任何 0 到 9 之間的單個數字,相當於 [^0-9] |
|
[\u4e00-\u9fa5] |
匹配任意單個漢字(這裡用的是 Unicode 編碼錶示漢字的 ) |
Regex限定符
上面的元字元都是針對單個字元匹配的,要想同時匹配多個字元的話,還需要藉助限定符。下面是一些常見 的限定符 ( 下表中 n 和 m 都是表示整數,並且 0<n<m) :
|
限定浮 |
說明 |
|
* |
匹配 0 到多個元字元,相當於 {0,} |
|
? |
匹配 0 到 1 個元字元,相當於 {0,1} |
|
{n} |
匹配 n 個元字元 |
|
{n,} |
匹配至少 n 個元字元 |
|
{n,m} |
匹配 n 到 m 個元字元 |
|
+ |
匹配至少 1 個元字元,相當於 {1,} |
|
\b |
匹配單詞邊界 |
|
^ |
字串必須以指定的字元開始 |
|
$ |
字串必須以指定的字元結束 |
說明:
( 1 )由於在Regex中“ \ ”、“ ? ”、“ * ”、“ ^ ”、“ $ ”、“ + ”、“(”、“)”、“ | ”、“ { ”、“ [ ”等字元已經具有一定特殊意義,如果需要用它們的原始意義,則應該對它進行轉義,例如希 望在字串中至少有一個“ \ ”,那麼Regex應該這麼寫: \\+ 。
( 2 )可以將多個元字元或者原義文本字元用括弧括起來形成一個分組,比如 ^(13)[4-9]\d{8}$ 表示任意以 13開頭的移動手機號碼。
( 3 )另外對於中文字元的匹配是採用其對應的 Unicode 編碼來匹配的,對於單個 Unicode 字元,如 \u4e00 表示漢字“一”, \u9fa5 表示漢字“龥”,在 Unicode 編碼中這分別是所能表示的漢字的第一個和最後一個的 Unicode 編碼,在 Unicode 編碼中能表示 20901 個漢字。
( 4 )關於 \b 的用法,它代表單詞的開始或者結尾,以字串“ 123a 345b 456 789d ”作為樣本字串,如果Regex是“ \b\d{3}\b ”,則僅能匹配 456 。
( 5 )可以使用“ | ”來表示或的關係,例如 [z|j|q] 表示匹配 z 、 j 、 q 之中的任意一個字母。
(以上內容參考http://blog.csdn.net/zhoufoxcn/archive/2010/03/12/5372420.aspx)
Regex,Regex類