Regular ['regj?l?] adj. 週期性;有規律的
Expression [?k'spre?(?)n; ek-] n. 表現,表示
Regular expression Regex
什麼是Regex?
用一個描述字串去驗證另一個字串是否符合描述字串的特徵。(不嚴謹,可以這麼理解)
思考:比如運算式“12+”,描述的意思是一個1和任意個2組成的字串,那麼'12'、’122‘、'122'….都符合描述特徵
Regex用來幹嘛?
常用到的幾種方式:
1、驗證字串是否符合指定要求:比如驗證郵箱格式、密碼個數等等
2、尋找符合指定要求的字串,這個比從父串中尋找子串方便太多
3、替換,更強大
思考:正則的用途無非2種,驗證、字串的處理(尋找、替換、刪除之類)
Regex的基礎知識
一、單種匹配,匹配一次
1、一般字元:字母、數字、漢字、底線、沒有特殊定義的標點
舉例::運算式c,匹配字串adasc,匹配結果:c,匹配位置:始於4,結束於5
2、逸出字元:有特殊意義的字元,採用前面‘+字母’的方式替換原字元
運算式 |
匹配特徵 |
|
斷行符號 |
|
分行符號 |
|
定位字元 |
\ |
代表本身 |
^ |
匹配^本身 |
$ |
匹配$本身 |
. |
匹配.本身 |
舉例:運算式$d,在匹配字串sas$d132,匹配結果:$d,匹配位置:始於3,結束於5
二、多種匹配,匹配一次
1、固定的多種匹配(匹配一次)
運算式 |
匹配特徵 |
d |
0~9的任意一個 |
w |
A-Z,a-z,0-9,_ 中的任意一個 |
s |
空格、定位字元、換頁符的任意一個 |
. |
匹配除了 外的任意一個 |
舉例:運算式a.d,匹配123ab11d,匹配結果:ab1,匹配位置:始於3,結束於6
2、自訂的多種匹配(匹配一次)
使用方括弧[],意思是匹配方括弧裡面的任意一個字元,[^]那就是匹配方括弧裡面字元以外的任意一個字元
運算式 |
匹配特徵 |
[abc1] |
a、b、c、1中的任意一個字元 |
[^abc] |
除了a、b、c以外的任意一個字元 |
[a-f] |
a到f之間任意一個字元 |
[^a-f] |
除了a到f之間以外的任意一個字元 |
舉例:運算式[^123][456],匹配12345678,匹配的結果45,匹配位置:始於3,結束於5
思考:理解[]代表其中任意一個字元,^代表字元以外的任一字元即可
三、多種匹配,匹配多次
如果想要實現多次匹配,那麼就要告訴描述的運算式你想要匹配幾次,這個東西就是次數修飾,有一點需要注意的是次數修飾放到被修飾的運算式後面
運算式 |
匹配特徵 |
{n} |
匹配n次 |
{m,n} |
匹配m~n之間的次數 |
{m,} |
匹配 >=m 次 |
? |
匹配 0~1中間的次數 |
* |
匹配 >=0次 |
+ |
匹配 >=1 次 |
舉例:運算式d?[ab]*,匹配abc123,匹配結果:ab匹配始於0,結束於2
思考:次數修飾符放到運算式後面用以表示重複的次數即可
四、特殊匹配
運算式 |
意義 |
^ |
與字串開始的地方匹配 |
$ |
與字串結束的地方匹配 |
|
匹配一個單詞的邊界,也就是單詞和空格之間的位置(不匹配任何字元,一邊是w,一邊是非w) |
| |
前後2個運算式是或的關係 |
() |
1、在被修飾匹配次數的時候,括弧代表一個整體 2、去匹配結果的時候,括弧內的匹配內容可以被單獨取到 |
舉例1:運算式start,匹配go,start,end,匹配結果是start
舉例2:運算式(go)+,匹配let's gogo,匹配結果是go go
舉例3:運算式$(d+.d*),匹配$12.33,匹配結果$12.33。單獨擷取括弧裡面的內容:12.33