【Visual Studio】C# 正則表達式

正則表達式

下表列出了所有的元字符和對它們的一個簡短的描述。

元字符

描述

\

將下一個字符標記符、或一個向後引用、或一個八進制轉義符。例如,“\\n”匹配\n。“\n”匹配換行符。序列“\\”匹配“\”而“\(”則匹配“(”。即相當於多種編程語言中都有的“轉義字符”的概念。

^

匹配輸入字行首。如果設置了RegExp對象的Multiline屬性,^也匹配“\n”或“\r”之後的位置。

$

匹配輸入行尾。如果設置了RegExp對象的Multiline屬性,$也匹配“\n”或“\r”之前的位置。

*

匹配前面的子表達式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等價於{0,}。

+

匹配前面的子表達式一次或多次(大於等於1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價於{1,}。

?

匹配前面的子表達式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。?等價於{0,1}。

{n}

n是一個非負整數。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個o。

{n,}

n是一個非負整數。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等價於“o+”。“o{0,}”則等價於“o*”。

{n,m}

mn均爲非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個o爲一組,後三個o爲一組。“o{0,1}”等價於“o?”。請注意在逗號和兩個數之間不能有空格。

?

當該字符緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的。非貪婪模式儘可能少地匹配所搜索的字符串,而默認的貪婪模式則儘可能多地匹配所搜索的字符串。例如,對於字符串“oooo”,“o+”將盡可能多地匹配“o”,得到結果[“oooo”],而“o+?”將盡可能少地匹配“o”,得到結果 ['o', 'o', 'o', 'o']

.點

匹配除“\n”和"\r"之外的任何單個字符。要匹配包括“\n”和"\r"在內的任何字符,請使用像“[\s\S]”的模式。

(pattern)

匹配pattern並獲取這一匹配。所獲取的匹配可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括號字符,請使用“\(”或“\)”。

(?:pattern)

非獲取匹配,匹配pattern但不獲取匹配結果,不進行存儲供以後使用。這在使用或字符“(|)”來組合一個模式的各個部分時很有用。例如“industr(?:y|ies)”就是一個比“industry|industries”更簡略的表達式。

(?=pattern)

非獲取匹配,正向肯定預查,在任何匹配pattern的字符串開始處匹配查找字符串,該匹配不需要獲取供以後使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字符之後開始。

(?!pattern)

非獲取匹配,正向否定預查,在任何不匹配pattern的字符串開始處匹配查找字符串,該匹配不需要獲取供以後使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。

(?<=pattern)

非獲取匹配,反向肯定預查,與正向肯定預查類似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。

*python的正則表達式沒有完全按照正則表達式規範實現,所以一些高級特性建議使用其他語言如java、scala等

(?<!patte_n)

非獲取匹配,反向否定預查,與正向否定預查類似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。

*python的正則表達式沒有完全按照正則表達式規範實現,所以一些高級特性建議使用其他語言如java、scala等

x|y

匹配x或y。例如,“z|food”能匹配“z”或“food”(此處請謹慎)。“[z|f]ood”則匹配“zood”或“food”。

[xyz]

字符集合。匹配所包含的任意一個字符。例如,“[abc]”可以匹配“plain”中的“a”。

[^xyz]

負值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”任一字符。

[a-z]

字符範圍。匹配指定範圍內的任意字符。例如,“[a-z]”可以匹配“a”到“z”範圍內的任意小寫字母字符。

注意:只有連字符在字符組內部時,並且出現在兩個字符之間時,才能表示字符的範圍; 如果出字符組的開頭,則只能表示連字符本身.

[^a-z]

負值字符範圍。匹配任何不在指定範圍內的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”範圍內的任意字符。

\b

匹配一個單詞的邊界,也就是指單詞和空格間的位置(即正則表達式的“匹配”有兩種概念,一種是匹配字符,一種是匹配位置,這裏的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;“\b1_”可以匹配“1_23”中的“1_”,但不能匹配“21_3”中的“1_”。

\B

匹配非單詞邊界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。

\cx

匹配由x指明的控制字符。例如,\cM匹配一個Control-M或回車符。x的值必須爲A-Z或a-z之一。否則,將c視爲一個原義的“c”字符。

\d

匹配一個數字字符。等價於[0-9]。grep 要加上-P,perl正則支持

\D

匹配一個非數字字符。等價於[^0-9]。grep要加上-P,perl正則支持

\f

匹配一個換頁符。等價於\x0c和\cL。

\n

匹配一個換行符。等價於\x0a和\cJ。

\r

匹配一個回車符。等價於\x0d和\cM。

\s

匹配任何不可見字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。

\S

匹配任何可見字符。等價於[^ \f\n\r\t\v]。

\t

匹配一個製表符。等價於\x09和\cI。

\v

匹配一個垂直製表符。等價於\x0b和\cK。

\w

匹配包括下劃線的任何單詞字符。類似但不等價於“[A-Za-z0-9_]”,這裏的"單詞"字符使用Unicode字符集。

\W

匹配任何非單詞字符。等價於“[^A-Za-z0-9_]”。

\xn

匹配n,其中n爲十六進制轉義值。十六進制轉義值必須爲確定的兩個數字長。例如,“\x41”匹配“A”。“\x041”則等價於“\x04&1”。正則表達式中可以使用ASCII編碼。

\num

匹配num,其中num是一個正整數。對所獲取的匹配的引用。例如,“(.)\1”匹配兩個連續的相同字符。

表達式 匹配符號 說明
(.)\1

[空格][空格]  

mm

aa

11

匹配兩個連續的相同字符
(m)\1 mm  

\n

標識一個八進制轉義值或一個向後引用。如果\n之前至少n個獲取的子表達式,則n爲向後引用。否則,如果n爲八進制數字(0-7),則n爲一個八進制轉義值。

\nm

標識一個八進制轉義值或一個向後引用。如果\nm之前至少有nm個獲得子表達式,則nm爲向後引用。如果\nm之前至少有n個獲取,則n爲一個後跟文字m的向後引用。如果前面的條件都不滿足,若nm均爲八進制數字(0-7),則\nm將匹配八進制轉義值nm

\nml

如果n爲八進制數字(0-7),且ml均爲八進制數字(0-7),則匹配八進制轉義值nml

\un

匹配n,其中n是一個用四個十六進制數字表示的Unicode字符。例如,。

表達式 匹配符號 說明
\u00A9 © 匹配版權符號(&copy;)

\p{P}

小寫 p 是 property 的意思,表示 Unicode 屬性,用於 Unicode 正表達式的前綴。中括號內的“P”表示Unicode 字符集七個字符屬性之一:標點字符。

其他六個屬性:

表達式 說明 備註
\p{P} 標點字符 !"#%&'()*,-./:;?@[\]_{}
\p{L} 字母

ABCDEFGHIJKLMNOPQRSTUVWXYZ

abcdefghijklmnopqrstuvwxyz

\p{M} 標記符號 一般不會單獨出現
\p{Z} 分隔符

比如空格、換行等

 

\p{S} 符號

比如數學符號、貨幣符號等

$+<=>^`|~

\p{N} 數字

比如阿拉伯數字、羅馬數字等

0123456789

ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ

\p{C} 其他字符 \r\n\t\f\v

*注:此語法部分語言不支持,例:javascript。

\<

\>

匹配詞(word)的開始(\<)和結束(\>)。例如正則表達式\<the\>能夠匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:這個元字符不是所有的軟件都支持的。
( ) 將( 和 ) 之間的表達式定義爲“組”(group),並且將匹配這個表達式的字符保存到一個臨時區域(一個正則表達式中最多可以保存9個),它們可以用 \1 到\9 的符號來引用。
|

將兩個匹配條件進行邏輯“或”(or)運算。例如正則表達式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:這個元字符不是所有的軟件都支持的。

特殊字符表達式

字符 字符解釋 轉義表達

ASCII表達(大小寫不敏感)

控制符表達
    \x00 ^@
  頭標開始   \x01 \cA
  正文開始   \x02 \cB
  正文結束   \x03 \cC
  傳輸結束   \x04 \cD
  查詢   \x05 \cE
  確認   \x06 \cF
  震鈴   \x07 \cG
  退格   \x08 \cH
  水平製表符 \t \x09 \cI
  換行\新行 \r \x0a \cJ
  豎直製表符 \v \x0b \cK
  換頁\新頁 \f \x0c \cL
  回車 \n \x0d \cM
  移出   \x0e \cN
  移入   \x0f \cO
  數據鏈路轉義   \x10 \cP
  設備控制1   \x11 \cQ
  設備控制2   \x12 \cR
  設備控制3   \x13 \cS
  設備控制4   \x14 \cT
  反確認   \x15 \cU
  同步空閒   \x16 \cV
  傳輸塊結束   \x17 \cW
  取消   \x18 \cX
  媒體結束   \x19 \cY
  替換   \x1a \cZ
  轉意   \x1b \c[
  文件分隔符   \x1c \c\
  組分隔符   \x1d \c]
  記錄分隔符   \x1e \c6
  單元分隔符   \x1f \c-
  空格   \x20  
! 歎號   \x21  
" 雙引號   \x22  
# 井號   \x23  
$ 貨幣符號 \$ \x24  
% 百分號   \x25  
& and   \x26  
' 單引號   \x27  
( 小括號-左 \( \x28  
) 小括號-右 \) \x29  
* 星號 \* \x2a  
+ 加號 \+ \x2b  
, 逗號   \x2c  
- 減號   \x2d  
. \. \x2e  
/ 斜杆   \x2f  
0 數字0   \x30  
1 數字1   \x31  
2 數字2   \x32  
3 數字3   \x33  
4 數字4   \x34  
5 數字5   \x35  
6 數字6   \x36  
7 數字7   \x37  
8 數字8   \x38  
9 數字9   \x39  
: 冒號   \x3a  
; 分號   \x3b  
< 小於號   \x3c  
= 等於號   \x3d  
> 大於號   \x3e  
? 問號 \? \x3f  
@ at   \x40  
A 大寫字母A   \x41  
B 大寫字母B   \x42  
C 大寫字母C   \x43  
D 大寫字母D   \x44  
E 大寫字母E   \x45  
F 大寫字母F   \x46  
G 大寫字母G   \x47  
H 大寫字母H   \x48  
I 大寫字母I   \x49  
J 大寫字母J   \x4a  
K 大寫字母K   \x4b  
L 大寫字母L   \x4c  
M 大寫字母M   \x4d  
N 大寫字母N   \x4e  
O 大寫字母O   \x4f  
P 大寫字母P   \x50  
Q 大寫字母Q   \x51  
R 大寫字母R   \x52  
S 大寫字母S   \x53  
T 大寫字母T   \x54  
U 大寫字母U   \x55  
V 大寫字母V   \x56  
W 大寫字母W   \x57  
X 大寫字母X   \x58  
Y 大寫字母Y   \x59  
Z 大寫字母Z   \x5a  
[ 中括號-左 \[ \x5b  
\ 斜杆 \\ \x5c  
] 中括號-右 \] \x5d  
^ 脫字符號 \^ \x5e  
_ 下橫線   \x5f  
`

反單引號

 

\x60

 
a 小寫字母a   \x61  
b 小寫字母b   \x62  
c 小寫字母c   \x63  
d 小寫字母d   \x64  
e 小寫字母e   \x65  
f 小寫字母f   \x66  
g 小寫字母g   \x67  
h 小寫字母h   \x68  
i 小寫字母i   \x69  
j 小寫字母j   \x6a  
k 小寫字母k   \x6b  
l 小寫字母l   \x6c  
m 小寫字母m   \x6d  
n 小寫字母n   \x6e  
o 小寫字母o   \x6f  
p 小寫字母p   \x70  
q 小寫字母q   \x71  
r 小寫字母r   \x72  
s 小寫字母s   \x73  
t 小寫字母t   \x74  
u 小寫字母u   \x75  
v 小寫字母v   \x76  
w 小寫字母w   \x77  
x 小寫字母x   \x78  
y 小寫字母y   \x79  
z 小寫字母z   \x7a  
{ 大括號-左   \x7b  
| 豎線 \| \x7c  
} 大括號-右   \x7d  
~ 波浪號   \x7e  
  Backspae   \x7f \cBackspace

常用匹配 

示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace System.Windows.Forms.Keyboard
{
    /*
     * Regular Expression
     */
    public class Regular
    {
        public const string sample1 = "you share rose get fun";
        #region 一句話包含26個英文字母
        /// <summary>
        /// 那隻敏捷的棕色狐狸跳過一隻懶狗。
        /// </summary>
        public const string Words1 = "The quick brown fox jumps over a lazy dog.";
        /// <summary>
        /// 把我的箱子裝上五打酒壺。
        /// </summary>
        public const string Words2 = "Pack my box with five dozen liquor jugs.";
        /// <summary>
        /// 五個拳擊奇才跳得很快。
        /// </summary>
        public const string Words3 = "The five boxing wizards jump quickly.";
        /// <summary>
        /// 疾風拂面,驚動了勇敢的吉姆。
        /// </summary>
        public const string Words4 = "Quick wafting zephyrs vex bold Jim.";
        /// <summary>
        /// 華爾茲女神,爲了快速的跳躍激怒巴德
        /// </summary>
        public const string Words5 = "Waltz nymph, for quick jigs vex Bud";
        #endregion
        /// <summary>
        /// 予人玫瑰手留餘香
        /// 魚香肉絲蓋飯
        /// </summary>
        public const string sample1 = "you share rose get fun";
    }
}

1、字符 *

\x2a
\x2A
\*

 

2、換行回車

\r\n
\cM\cJ

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章