- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業務經營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯網協會理事單位
- 安全聯盟認證網站身份V標記
- 域名注冊服務機構許可:滇D3-20230001
- 代理域名注冊服務機構:新網數碼
正則表達式
使用單個字符串來描述、匹配一系列符合某個語法規則的字符串
輸入驗證
查找替換操作
高級字符串操作
文件搜索或重命名
白名單和黑名單
常規匹配(簡單字符)
一串不包含特殊字符的正則表達式匹配他自己
范例
[root@localhost ~]# cat /etc/passwd|grep test
匹配包含test的行
特殊字符
\是轉義字符,其后面的字符會代表不同的意思,轉義字符主要有三個作用:
第一種,是為了匹配不方便顯示的特殊字符,比如換行,tab符號等
第二種,正則中預先定義了一些代表特殊意義的字符,比如\w等
第三種,在正則中某些字符有特殊含義(比如下面說到的),轉義字符可以讓其顯示自身的含義
匹配*包圍的子串
\*[^\*]*\*
下面是常用轉義字符列表:
字符集
有時需要匹配一類字符,字符集可以實現這個功能
語法:[ ]分隔
范例:
[abc] #匹配a或b或c
范例:
能匹配到:apple banana
不能匹配到:king author 345%5
[0-9] #匹配0到9中的一個數字 即[0123456789]
范例:
能匹配到:8777 0xEEEEE
不能匹配到:king author _icon%
在前面添加^,可表示非的意思
[^abc] 匹配abc外的所有字符中的一個
范例:
非法用戶名 [^a-zA-Z0-9_] 只允許大小寫字母、數字、下劃線
正則規定的特殊字符,與上述一致
. #匹配除換行外的任意一個字符
\w #匹配任意數字或字母或下劃線 [0-9a-Z_]
\d #匹配任意一個數字 [0-9]
量詞
匹配多次某個字符
正則中的量詞有多個,如?、+、*、{n}、{m,n}、{m,}
{n} 匹配n次
a{2} 匹配aa
{m,n} 匹配m次 - n次 優先匹配n次
b{2,4} 匹配bb,bbb,bbbb 優先匹配bbbb
{m,} 匹配m-∞次,優先匹配∞次,比如a{1,},可以匹配aaaa...
? 匹配0次或1次,優先匹配1次,相當于{0,1}
+ 匹配1-n次,優先匹配n次,相當于{1,}
* 匹配0-n次,優先匹配n次,相當于{0,}
正則默認和人心一樣是貪婪的,也就是常說的貪婪模式,凡是表示范圍的量詞,都優先匹配上限而不是下限
有時候這不是我們想要的結果,可以在量詞后面加上?,就可以開啟非貪婪模式
a{1, 3}? // 匹配字符串'aaa'的話,會匹配a而不是aaa
范例:
匹配六個字符的16進制數
[0-9A-F]{6}
字符邊界
有時我們會有邊界的匹配要求,比如已xxx開頭,已xxx結尾
^在[]外 表示 匹配開頭的意思
^abc // 可以匹配abc,但是不能匹配aabc
$ 表示 匹配結尾的意思
abc$ // 可以匹配abc,但是不能匹配abcc
上面提到的\b表示單詞的邊界
abc\b // 可以匹配 abc ,但是不能匹配 abcc
范例:匹配國內手機號
^1[3-9][0-9]{9}
選擇表達式
有時我們想匹配x或者y,如果x和y是單個字符,可以使用字符集,[abc]可以匹配a或b或c,如果x和y是多個字符,字符集就無能為力了,此時就要用到分組
正則中 用|來表示分組,a|b表示匹配a或者b的意思
123|456|789 // 匹配 123 或 456 或 789
[ ] 單個字符 | 多個字符
分組與引用
分組是正則中非常強大的一個功能,可以讓上面提到的量詞作用于一組字符,而非單個字符,分組的語法是圓括號包裹(xxx)
(abc){2} // 匹配abcabc
分組不能放在[]中,分組中還可以使用選擇表達式
(123|456){2} // 匹配 123123、456456、123456、456123
和分組相關的概念還有一個捕獲分組和非捕獲分組,分組默認都是捕獲的,在分組的(后面添加?:可以讓分組變為非捕獲分組,非捕獲分組可以提高性能和簡化邏輯
和分組相關的另一個概念是引用,比如在匹配html標簽時,通常希望<xxx></xxx>后面的xxx能夠和前面保持一致
引用的語法是\數字,數字代表引用前面第幾個捕獲分組,注意非捕獲分組不能被引用
<([a-z]+)><\/\1> // 可以匹配 `<span></span>` 或 `<div></div>`等
回溯
回溯允許引用之前捕獲的子字符串。
匹配第一組可以使用 \1,匹配第二組可以使用 \2,依此類推…
提交成功!非常感謝您的反饋,我們會繼續努力做到更好!
這條文檔是否有幫助解決問題?
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP