元字符
- ^ 匹配輸入字符串的開始位置
- $ 匹配輸入字符串的結束位置
- * 匹配前面的子表達式零次或多次
- + 匹配前面的子表達式一次或多次
- ? 匹配前面的子表達式零次或一次
- \d 匹配一個數字字符,等價於[0-9]
- \w 匹配一個包含數字、字母、下劃線的任何單個字符,等價於[a-zA-Z0-9_]
- \s 匹配任何空白字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。
- i 執行對大小寫不敏感的匹配
- g 執行全局匹配
中括號[] 的意義
中括號在正則中稱爲字符組(Character class)。
簡單字符組
[abc]代表a,b,c 中的任何一個
示例:
匹配 bat、cat、fat:
regx="[bcf]at",則“haovecatisfatsobat”可以匹配到cat,fat,bat
範圍字符組(Range class,與連字符 “-” 一起使用)
如果要匹配0-9可以寫成 [0123456789],但有了範圍字符組更簡潔了,可以寫成 [0-9]
[a-z,A-Z]代表英文字母中的任何一個
這裏最關鍵的是連字符 "-",不要理解爲減號。 它的意義是“從什麼到什麼”。
組合字符組(Combination class)
由多種字符組組合一起的字符組
[0-9_a-zA-Z]表示任意數字、下劃線、英文字母
需要注意的是,字符組內不要有空格
排除型字符組(Negated character class,與脫字符 “^” 一起使用)
排除型字符組表示:匹配一個未列出的字符(match a character that's not listed),而不是不要匹配列出的字符。
[abc]代表除了a,b,c 以外的任何字符
字符組運算(方括號嵌套+運算符)
方括號裏允許嵌套方括號,可以進行∩交,∪並,差運算
[a-d[m-p]]表示a-d或m-p中的任何字符(並)
[a-z&&[def]]表示d,e,f中的任何一個字符(交)
[a-f&&[^bc]]表示a,d,e,f(差)
中括號中的字符不再有特殊的含義
由於“.”代表任意一個字符,所以在正則表達式中如果想使用普通意義的點字符,必須使用[.]
"*"是限定符表示0或多次,如果想表達普通意義的星字符,必須使用[*]
限定修飾符
貪婪限定符 | 惰性限定符 | 說明 |
---|---|---|
* | *? | 匹配零次或多次。 |
+ | +? | 匹配一次或多次。 |
? | ?? | 匹配零次或一次。 |
{n} | {n}? | 準確分配n次。 |
{n,} | {n,}? | 至少匹配 n次。 |
{n,m} | {n,m}? | 從n與m次。 |
數量 n 和 m 是整數常數。
這裏的原則是:一般的字符後面追加限定符是(儘可能多)的匹配匹配項,限定符後面追加問號的是(儘可能少)的匹配匹配項。
tips:儘可能多=貪婪,儘可能少=惰性。