有時候乙個正規表示式能「少寫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 ...