1.正則表達式:記錄文本的規則的代碼
\b:元字符,單詞分界處,匹配一個位置
.:元字符,匹配出了除了換行符以外的任意字符
*:元字符,指定*前邊的內容可以連續重復以使整個表達式得到匹配
\d:元字符,匹配一位數字
\s:匹配任意的空白字符,如空格,制表符,換行符,中文全角空格
\w:匹配字母,數字,下划線,漢字
\d+:匹配一個或多個連續的數字,匹配重復一次或多次
^:匹配字符串的開始
&:匹配字符串的結束
?:重復0次或者一次
{n}:重復n次
{n,}:重復n或者更多次
{n,m}:重復n到m次
2.字符類
[a,e,i,o,u] [.?!] [0-9]
3.分支條件
“|”:從左到右,順序
4.分組
用小括號來指定表達式(分組),再用大括號指定重復次數
5.反義
\W:匹配任意不是字母,數字,下划線,漢字的字符
\S:匹配任意不是空白符的字符
\D:匹配任意非數字的字符
\B:匹配不是單詞開頭或者結束的位置
[^x]:匹配除了x以外的任意字符
6.使用小括號的特定用途
捕獲:(exp)匹配exp,並捕獲文本到自動命名的組里
(?<name>exp) 匹配exp,並捕獲文本到名稱為name的組里,同(?'name'exp)
(?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號
零寬斷言:(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注釋:(?#comment)
7.貪婪與懶惰
一般情況匹配盡可能多的字符:a. *b 貪婪
懶惰:a.*?b
*?:重復任意次,單盡可能少重復
??:重復0次或者1次,但盡可能少重復
{n,m}?:重復n~m次,但盡可能少重復
8.處理選項
IgnoreCase:忽略大小寫
Multiline:多行模式
Singleline:單行模式
IgnorePatternWhiteSpace:忽略空白
Explicitcapture:顯示捕獲
平衡組,遞歸匹配:
(?'group'):把捕獲的內容命名為group,並壓入堆棧stack
(?'-group'):從堆棧中彈出最后壓入堆棧的名為group的捕獲內容,若堆棧本來為空,則本分組的匹配失敗
(?(group)yes|no):若堆棧上存在以名為group的捕獲內容的話,繼續匹配yes部分表達式,否則匹配no部分
(?!):零寬負相先行斷言,無后綴表達式,故匹配總是失敗
\cN:ASII控制字符,比如\cC代表ctrl+C
\A:字符串開頭,類似^,但不受多行選項的影響
\Z:字符串結尾或行尾,不受多行選項影響
\G:當前搜索的開頭
\P{name}:Unicode中命名為name的字符類
(?>exp):貪婪表達式
(?<x>-<y>exp):平衡組
(?im-nsx:exp):在字表達式exp中改變處理選項
(?im-nsx)為表達式后面的部分改變處理選項
(?(exp)ye|no):零寬正向先行斷言,能匹配yes,不能,no表達式
(?(name)yes|no):命名為name的組捕獲到了內容,則為yes,否則no
郵件:\w+([-+.']\w+)*@\w+([-.]\w)*\.\w+([-.]\w+)*