使用元字符
匹配數字:
\d |
[0-9] |
\D |
[^0-9] |
匹配字母數字
\w |
[0-9a-zA-Z_] 注意:包括下劃線 |
\W |
[^0-9a-zA-Z_] |
匹配空白字符
\s |
任何空白字符[\f\n\r\t\v] |
\S |
任何非空白字符[^\f\n\r\v] |
[\b] |
匹配退格符是一個特例 |
匹配十六進制是使用\x前綴加數字 \x0A 匹配\n
八進制使用\0前綴加數字
例子:
Ø 匹配郵箱:[\w\.]+@[\w\.]+\.\w+ 但不是最好的,不完整
Ø 郵箱第一字母必須是字母或下劃線,因此符合要求的的模式是:
\w*[\w.]+@[\w.]+\.\w+
Note:當在[]中使用.、+、*等元字符時會自動將其解釋爲普通字符,因此[\w.]和[\w\.]是一樣的。
重複匹配
匹配一個或多個 +
匹配零個或多個 *
匹配零個或一個 ?
匹配重複次數 {n}、{n,m}、{n,}至少n次、{ ,m}最多m次【包含n,m】
例子:
Ø 匹配一個網頁地址: https?://[\w./]+或http[s]?://[\w./]+
Ø 匹配空行(在windows中空格是\n\r,在Linux/Unix中空格是\n),單獨匹配各自系統中的空行是:Windows—‘\r\n \r\n’ Linux/Unix—‘\n\n’;因此使用一個模式可以表示爲: [\r]?\n[\r]?\n
Ø 檢查日期格式是否正確(對日期值的檢查應該在此之前確定):
\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4}
防止過度匹配:+、*都是貪婪性,會按照最多的去匹配;要使用懶惰型版本的元字符只需要給貪婪型元字符加上?後綴即可。
+?、*?、{n,}?是各自貪婪型元字符對應的懶惰型元字符版本
Ø 將HTML中的<B></B>標籤中的內容匹配出來
<B>AK</B> and <B>HI</B>
模式1:[<B/>].*[</B>] 過度匹配
模式2:[<B/>].*?[</B>]
位置匹配
元字符 |
含義 |
\bword\b |
匹配單詞邊界,匹配單詞長度爲4,僅僅匹配單詞word本身 his cap and cape from capsized 例子: \bcap\b 將匹配cap \bcap 將匹配以cap開頭的任意單詞 cap\b 匹配以cap結尾的任意單詞 |
\B\B |
不匹配單詞邊界, colors and – coded pass-key 例子: \B-\B將匹配一個前後都不是單詞邊界的連字符 pass-key |
字符串的開頭:^ 字符串的結尾:$
分行匹配模式:?m (multiline mode) |
使用行分隔符後,^除了匹配字符串的開頭外,還能夠匹配行分隔符(換行符)後面的開始位置,同樣$還能夠匹配行分隔符後面的結束位置。(?m)必須出現在整個模式的前面 例子: 判斷某一文件是不是xml文件: ^\s<\?xml .*\?> </html>標籤後面不應該有其他內容了,進行合法檢查: </[Hh][Tt][Mm][Ll]>\s*$ 匹配JavaScript中的所有註釋: (?m)^\s*//.*$ |
使用子表達式
元字符和字符是正則表達式的基本構件。子表達式是尅嵌套的,
例子
Ø 在html中使用 (None-breaking space)表示非換行型空格,需要匹配一個或多個 ;但是使用模式’ {2,}’是不對的,需要對整體進行匹配因此使用括號“()”將其括起來做一個獨立的元素使用,該模式就是子表達式,通常使用小括號括起來。( ){2,}
Ø 匹配IP地址格式:
模式1:\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
模式2:(\d{1,3}.){3}\d{1,3}
Ø 把用戶記錄中的年份數字打印出來
日誌格式:
ID:042
SEX:M
DOB:1996-08-17
Status:Active
匹配模式:(19|20)\d{2}
Ø 使用子表達式的嵌套,匹配IP地址格式且匹配合法的IP第地址,在構造正則表達式一定要清楚相匹配什麼,不像匹配什麼:
匹配IP地址:任何一個1位或2位數字、任何一個以1開頭的3位數字、任何一個以2開頭、第二位數字在0~4的3位數字、任何一個以25開頭,第3位數字在0~5之間的3爲數字
模式:(((\d{1,2})|{1\d{2})|(2[0-4]\d)(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4)|(25[0-5]))