正則表達式簡介
正則表達式描述了一種字符串匹配的模式,一般使用正則表達式主要是實現下面三個需求:
- 檢查一個串是否包含某種形式的子串
- 將匹配的子串替換
- 從某個串中取出符合條件的子串
正則表達式是由普通字符(例如 a 到 z)以及特殊字符組成的文字模式。模式描述在搜索文本時要匹配的一個或多個字符串。正則表達式作爲一個模板,將某個字符模式與所搜索的字符串進行匹配。
一、普通字符
普通字符包括沒有顯式指定爲元字符的所有可打印和不可打印字符。這包括所有大寫和小寫字母、所有數字、所有標點符號和一些其他符號。
二、特殊字符
特殊字符是正則表達式裏有特殊含義的字符,也是正則表達式的核心匹配語法。參見下表:
特別字符 | 描述 |
---|---|
$ | 匹配輸入字符串的結尾位置。 |
(,) | 標記一個子表達式的開始和結束位置。子表達式可以獲取供以後使用。 |
* | 匹配前面的子表達式零次或多次。 |
+ | 匹配前面的子表達式一次或多次。 |
. | 匹配除換行符 \n 之外的任何單字符。 |
[ | 標記一箇中括號表達式的開始。 |
? | 匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。 |
\ | 將下一個字符標記爲或特殊字符、或原義字符、或向後引用、或八進制轉義符。例如, n 匹配字符 n 。\n 匹配換行符。序列 \\ 匹配 ‘\’ 字符,而 ( 則匹配’ (’ 字符。 |
^ | 匹配輸入字符串的開始位置,除非在方括號表達式中使用,此時它表示不接受該字符集合。 |
{ | 標記限定符表達式的開始。 |
| | 指明兩項之間的一個選擇。 |
三、限定符
限定符用來指定正則表達式的一個給定的組件必須要出現多少次才能滿足匹配。見下表:
字符 | 描述 |
---|---|
* | 匹配前面的子表達式零次或多次。例如,foo* 能匹配 fo 以及 foooo。* 等價於{0,}。 |
+ | 匹配前面的子表達式一次或多次。例如,foo+能匹配 foo 以及 foooo,但不能匹配 fo。+ 等價於 {1,}。 |
? | 匹配前面的子表達式零次或一次。例如,Your(s)? 可以匹配 Your 或 Yours 中的Your 。? 等價於 {0,1}。 |
{n} | n 是一個非負整數。匹配確定的 n 次。例如,f{2} 不能匹配 for 中的 o,但是能匹配 foo 中的兩個 o。 |
{n,} | n 是一個非負整數。至少匹配 n 次。例如,f{2,} 不能匹配 for 中的 o,但能匹配 foooooo 中的所有 o。o{1,} 等價於 o+。o{0,} 則等價於 o*。 |
{n,m} | m 和 n 均爲非負整數,其中 n 小於等於 m。最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 將匹配 foooooo 中的前三個 o。o{0,1} 等價於 o?。注意,在逗號和兩個數之間不能有空格。 |