“正則表達式”描述在搜索文本正文時要匹配的一個或多個字元串。 該表達式可用作一個將字元模式與要搜索的字元串相匹配的模板。 正則表達式包括普通字元(例如,a 到 z 之間的字母)和特殊字元(稱為“元字元”)。 特殊字元 若要匹配這些特殊字元之一,必須首先轉義字元,即,在字元前面加反斜杠字元 (\)。 ...
“正則表達式”描述在搜索文本正文時要匹配的一個或多個字元串。 該表達式可用作一個將字元模式與要搜索的字元串相匹配的模板。
正則表達式包括普通字元(例如,a 到 z 之間的字母)和特殊字元(稱為“元字元”)。
特殊字元
若要匹配這些特殊字元之一,必須首先轉義字元,即,在字元前面加反斜杠字元 (\)。 例如,若要搜索“+”文本字元,可使用表達式“\+”。
元字元 | 行為 | 示例 |
* | 0次或者多次匹配前面的字元或者子表達式,等價於{0,} | ta*可以和t , ta taaaaa進行匹配 |
+ | 1次或者多次匹配前面的字元或者子表達式,等價於{1,} | ta+可以和ta taaaaa進行匹配 |
? |
0次或者1次匹配前面的字元或者子表達式,等價於{0,1},
當?緊隨其他符號的時候,會啟用非貪婪模式 |
ta?可以和t , ta進行匹配
ta*?和taaaaa進行匹配時,會匹配t;但是ta?和taaaaa 進行匹配時會匹配ta |
^ |
匹配字元串開始的位置,表示從字元串的初始位置開始尋找
當放在[]裡面時,代表不匹配[]其中的字元 |
^\d{2}表示匹配字元串從頭開始的2個數字
[^abc]代表不匹配a,b,c三個任意元字元
|
$ | 匹配字元串結束的位置,表示字元串的結束位置 | \d{2}$匹配結尾處的兩個數字 |
. | 匹配除了換行符\n的任意單個字元 如果需要匹配換行符,則要寫成[\s\S]類似的 | b.b與bob,bsb都可以匹配 |
[] | 匹配[]中的任意一個字元 | [abcd]匹配a,b,c,d中的任何一個 |
{} | 表示重覆前面字元的重覆次數 | a{2,4}匹配aa,aaa,aaaa |
() | 表示一組 | (a*)ccc 匹配ccc和accc |
| | 表示在多個選項之間進行選擇 | a|b|c等價於[abc] |
\ | 對於上面的這些字元都有特殊含義,如果想要找到不是特殊含義的,可以加\來進行轉義 | \\ 與\匹配 \+與+匹配 |
/ | 代表正則表達式的開始和結尾 | /book\+/ig |
元字元
有一些特殊的字元
元字元 | 行為 | 示例 |
\b | 與一個字的邊界匹配,就是字與空格間的位置 | er\b與never中的er匹配,但是與verb中的er不匹配 |
\B | 不與一個字的邊界匹配,就是字與空格間的位置 | er\B與never中的er不匹配,但是與verb中的er匹配 |
\d | 等效於 [0-9] | \d{2,4}與12,123,1234匹配 |
\D | 等效於 [^0-9] | \D{2,4}與AC,ASCF匹配 |
\w | 等效於 [A-Za-z0-9_] | |
\W | 等效於 [^A-Za-z0-9_] | |
(模式) | 與模式匹配,並保存匹配項 | (chapter)[1-9]匹配chapter4時,會保存chapter以方便以後用 |
(?:模式) | 與模式匹配,但是不保存匹配項 | |
(?=模式) |
找到一個匹配項後,將在匹配文本之前開始搜索下一個匹配項。 不會保存匹配項以備將來之用。 |
^(?=.*\d).{4,8}$ 對密碼應用以下限制:其長度必須介於 4到 8 個字元之間, 並且必須至少包含一個數字。 在該模式中,.*\d 查找後跟有數字的任意多個字元。 對於搜索字元串“abc3qr”,這與“abc3”匹配。 從該匹配項之前(而不是之後)開始,.{4,8} 與包含 4-8 個字元的字元串匹配。 這與“abc3qr”匹配。 ^ 和 $ 指定搜索字元串的開始和結束位置。 這將在搜索字元串包含匹配字元之外 的任何字元時阻止匹配。表示先做(?=)中的表達式,然後再對整體做?=模式之後的正則表達式 |
優先順序
下圖從高到低的講了一下運算符的優先順序排序
運算符 | 說明 |
\ | 進行轉義字元 |
(),(?:),(?=) | 括弧和中括弧 |
*,+,?,{n,} | 限定符 |
^,$,\d,\D,\w,\W | 定位點和序列 |
| | 替換 |