Regex,Regex類

來源:互聯網
上載者:User

標籤: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類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.