六位純數字正規表示式 如何學懂正規表示式

2021-10-18 02:04:16 字數 3361 閱讀 1984

有時候乙個正規表示式能「少寫100行**」,工作中經常會用到,我們需要學懂它,本文介紹如何「學懂」正規表示式,並推薦github上最火的正規表示式專案和視覺化正規表示式。

通過例子學習正規表示式 day1

找出以 lefe 或 lefe_x 單詞開頭,以 wsy 結尾的字串。比如:「lefe name is wsy」 是合法的,而 「lef name is wsy」 是非法的。

「正規表示式為」

- `^`表示從字串的開始位置匹配,`^(?:lefe|lefe_x)` 表示以 `lefe` 或者 `lefe_x `開頭;

-  `|` 表示或,比如 a | b | c ,表示 a,b 和 c 中任意乙個;

-  `()` 表示乙個組,`(?:)` 表示不捕獲這個分組;

-  `\b` 表示匹配乙個單詞的邊界,在這裡只能匹配 `lefe` 和 `lefe_x`;

- 匹配字串的開頭和結尾後,基本上完成了題目的要求,但是字串`lefe`(lefe_x)和`wsy`之間可以是任意字元,`.` 表示匹配任意字元(不包含換行符),``表示匹配0個或多個字元,則`.` 表示匹配0個或多個任意字元(不包含換行符);

- `$`表示從字串的結尾處開始匹配,`wsy$` 則表示以 `wsy` 結尾。

【 知識點 】

- 字元邊界`^`,`$` 和 `\b` 表示字元的邊界,`^` 匹配字串的開頭,`$`匹配字串的結尾,`\b`匹配單詞的邊界,如:`lefe\b` 可以匹配 `lefe` ,但不可匹配 `lefe_x`;

- 量詞

只出現 m 次,lefe 只能匹配 lefee

出現 m 到 n 次

至少出現 m 次

- 選擇表示式

比如 lefe | lefe_x | lefe ,表示 lefe,lefe_x 和 lefe 中任意乙個

- 分組

以括號括起來的字符集為乙個分組,在 ( 新增 ?: 將忽略這個分組

- 字符集

. 匹配除換行符以外的任意乙個字元

\w = [0-9a-za-z_]

\w = [^0-9a-za-z_]

\s = [\t\n\v]

\s = [^\t\n\v]

\d = [0-9]

\d = [^0-9]

通過例子學習正規表示式 day2

匹配以 `lefe` 開頭,`lefe` 後面不能緊跟`_x`,後面由數字,-,_和字母組成,且不包含l,e,f 三個字母中的任意乙個(至少一位),且為最短的使用者名稱。

【分析】

根據要求可以把題目拆分成:

1.以 `lefe` 開頭,不能為 `lefe_x`。可以轉換成 `^lefe(?!_x)`;

2.中間部分由數字,-,_和字母組成,不能包含 l,e,f,至少一位。可以轉換成 `[0-9a-dg-km-za-dg-km-z_-]+`;

3.匹配最短的。在正規表示式中用到了貪婪與非貪婪的概念,使用 `?`;

【正規表示式】^(lefe(?!_x)(?:[0-9a-dg-km-za-dg-km-z_-]+?))

【知識點】

1.非獲取匹配

lefe(?=_x) ,lefe 後面緊跟著 _x,正向肯定預查

lefe(?!_x) ,lefe 後面不能出現 _x,正向否的定預查

(?(?<=lefe)_x ,_x 前面為 lefe,反向否的定預查

2.字元集合

[xyz] 匹配 x,y,z 任意乙個字元;

[^xyz] 匹配除 x,y,z 外的任意乙個字元;

[a-z] 匹配 a-z 中任意乙個字元;

3.貪婪匹配與非貪婪匹配

預設的匹配規則為非貪婪匹配,使用 `?` 使貪婪匹配變為非貪婪匹配。比如:使用正規表示式`lefe` 匹配 `lefeeeeeeee`,如果為貪婪匹配(`lefe`)時將匹配 `lefeeeeeeee `,為非貪婪匹配(`lefe?`)時,將匹配 `lefee`。

4.量詞 `*`,`+`,`?`  

`'lefe*'` ,lef 後有0個或多個e   

`'lefe+'` ,lef 後有1個或多個e  

`'lefe?'` ,lef 後有0個或1個e

通過例子學習正規表示式 day3

【例3】匹配由數字和字母組成的 6-16 位字串。 

【分析】  

- 數字和字母組成,可以表示為:`[0-9a-za-z]`;

- 6-16位字元,可以表示為``;

- 由數字和字母組成,則不能為純數字和純字母組成的。

【正規表示式】^(?![0-9]+$)(?![a-za-z]+$)[0-9a-za-z]$

【解析】

`?!`在【例2】中已說明,`(?![0-9]+$)` 不能為純數字,`(?![a-za-z]+$)` 不能純字母。

【例4】匹配 html 標籤,比如 `

hello lefe。`

【分析】  

html 標籤為成對出現的,比如`,`

【正規表示式】   

【知識點】  

`\數字`:表示引用分組,`\1` 表示匹配分組1

推薦

1. 視覺化**

它可以把正規表示式以圖的形式表達出來。比如:

2. github 最火的正規表示式專案:

推薦閱讀:

開啟我的前端之路

**資料結構和演算法

iOS 正規表示式判斷純數字以及匹配11位手機號碼

1 用正規表示式 是否是純數字 bool isnumtext nsstring str else 具體正則對不對 還需要大家來看以下 第二種系統源生的 我推薦第二種 nsstring trimming 判斷是不是純數字 nscharacterset decimaldigitcharacterset ...

數字正規表示式

驗證數字的正規表示式集 驗證數字 0 9 驗證n位的數字 d 驗證數字有0到兩位小數 0 9 0 9 驗證至少n位數字 d 驗證m n位的數字 d 驗證零和非零開頭的數字 0 1 9 0 9 驗證有兩位小數的正實數 0 9 0 9 驗證有1 3位小數的正實數 0 9 0 9 驗證非零的正整數 1 9...

數字正規表示式

驗證數字的正規表示式集 驗證數字 0 9 驗證n位的數字 d 驗證至少n位數字 d 驗證m n位的數字 d 驗證零和非零開頭的數字 0 1 9 0 9 驗證有兩位小數的正實數 0 9 0 9 驗證有1 3位小數的正實數 0 9 0 9 驗證非零的正整數 1 9 0 9 驗證非零的負整數 1 9 0 ...