正則表達式簡介


正則表達式是一種可以在許多現代應用程序和編程語言中使用的特殊形式的代碼模式。

· 可是用它來驗證輸入是否符合給定的文本模式

· 在大段文本中查找匹配該模式的文本

· 用其他文本來替換匹配該模式的文本或者重新組織匹配文本的一部分

· 把一塊文本劃分成一系列更小的文本

……等等


1、正則表達式基礎
1.1 元字符和語法

字符:
. 匹配任意除換行符'\n' 以外的字符 

如:a.c 匹配abc


\ 轉義字符          

如:a\.c 匹配 a.c
[...] 字符集(字符類)。對應的位置可以是任意字符。 如:a[bcd]e 匹配 abe ace ade
可以單個列出,也可以給定範圍,也可以取反^

預定義字符集:
\d     數字[0-9]
\D     非數字,相當於[^\d]
\s     空白字符:[<空格>\t\r\n\f\v]
\S     非空字符:[^\s]
\w     單詞字符:[A-Za-z0-9]
\W     非單詞字符:[^\w]


字符集合: 
[[:space:]] :所有空白字符 
[[:punct:]] :所有的標點符號 
[[:lower:]] :所有小寫 
[[:upper:]] :所有大寫 
[[:digit:]] :所有數字 
[[:alnum:]] :匹配字母和數字 
[[:alpha:]] :所有字母 


次數匹配:
*     匹配前一個字符的0 或無限次
+     匹配前一個字符1次或無限次
?     匹配前一個字符0次或1次
{m}   匹配前一個字符m次
{m,n} 匹配前一個字符m至n次
*?  +?  ??  {m,n}?     使* + ? {m,n}變成非貪婪模式

邊界匹配(不消耗匹配字符串中的字符)
^     匹配字符串開頭。多行模式下匹配每一行的開頭  

如:^abc 匹配 abc


$     匹配字符串結尾。多行模式下匹配每一行的結尾     

如:abc$ 匹配 abc


\A     僅匹配字符串開頭
\Z     僅匹配字符串末尾
\b     匹配字符串結尾
\B     [^\b]

\<     詞首, 出現於單詞的左側. \b 
    \<char 
\>     詞尾, 出現在單詞的右側. \b 
    char\> 
\<CHAR\>  錨定一個單詞 


邏輯、分組
|     |表示左右表達式任意匹配一個          

例如:abc|cbd 匹配 abc 或者cbd


(...)     括號裏面的表達式作爲分組,後面還可以接數量詞  

如:(abc){2}匹配 abcabc  a(123|456)c 匹配 a123c


(?P<name>)  分組,除了原有的編號外,再指定一個別名。     

如:(?P<id>abc){2}匹配abcabc


\<number>     引用編號爲<number>的分組匹配到的字符串。     

如:(\d)abc\1 匹配 1abc1


(?P=name)     引用別名爲<name>的分組匹配到的字符串。          

如:(?P<id>\d)abc(?P=id)匹配 1abc1

特殊構造(不作爲分組)
(?:...)  (...)的不分組版本,用於使用'|'或後接數量詞          

如:(?:abc){2}匹配 abcabc


(?iLmsux)     iLmsux的每一個字符代表一個匹配模式,只能用在正則表達式的開頭,可選多個。 如:(?i)abc 匹配ABC


(?#...)          #後的內容將作爲注視被忽略。          

如:abc(?#comment)123 匹配 abc123


(?=...)          之後的字符串內容需要 匹配表達式 才能成功匹配。不消耗字符串內容。 如:a(?=\d) 匹配後面是數字的a


(?!...)          之後的字符串內容需要 不匹配表達式 才能成功匹配。不消耗字符串內容。 

如:a(?!\d)匹配 後面不是數字的a


(?<=...)     之前的字符串內容需要 匹配表達式 才能成功匹配。不消耗字符串內容。
如:a(?<=\d)匹配 前面是數字的a


(?<!...)     之前的字符串內容需要 不匹配表達式 才能成功匹配。不消耗字符串內容。
如:a(?<!\d)匹配 前面不是數字的a


(?(id/name)yes-pattern|no-pattern)     如果編號爲id/別名爲name的組匹配到字符串,則需要匹配yes-pattern,否則匹配no-pattern. |no-pattern 可以省略    

如:(\d)*abc(?(1)\d|abc) 匹配 1abc2 或者 abcabc


1.2. 數量詞的貪婪模式與非貪婪模式
正則表達式通常用於在文本中查找匹配的字符串。
數量詞默認是貪婪的(在少數語言裏也可能是默認非貪婪),總是嘗試匹配儘可能多的字符;非貪婪的則相反,總是嘗試匹配儘可能少的字符。
例如:正則表達式"ab*"如果用於查找"abbbc",將找到"abbb"。而如果使用非貪婪的數量詞"ab*?",將找到"a"。



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