国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

正則表達(dá)式

2023-04-20 17:47:02 5458

正則表達(dá)式

使用單個(gè)字符串來(lái)描述、匹配一系列符合某個(gè)語(yǔ)法規(guī)則的字符串

  • 輸入驗(yàn)證

  • 查找替換操作

  • 高級(jí)字符串操作

  • 文件搜索或重命名

  • 白名單和黑名單

常規(guī)匹配(簡(jiǎn)單字符)

一串不包含特殊字符的正則表達(dá)式匹配他自己

范例

[root@localhost ~]# cat /etc/passwd|grep test

匹配包含test的行

特殊字符

\是轉(zhuǎn)義字符,其后面的字符會(huì)代表不同的意思,轉(zhuǎn)義字符主要有三個(gè)作用:

第一種,是為了匹配不方便顯示的特殊字符,比如換行,tab符號(hào)等

第二種,正則中預(yù)先定義了一些代表特殊意義的字符,比如\w等

第三種,在正則中某些字符有特殊含義(比如下面說(shuō)到的),轉(zhuǎn)義字符可以讓其顯示自身的含義

匹配*包圍的子串
\*[^\*]*\*

下面是常用轉(zhuǎn)義字符列表:


字符集

有時(shí)需要匹配一類(lèi)字符,字符集可以實(shí)現(xiàn)這個(gè)功能

語(yǔ)法:[ ]分隔

范例:

[abc] #匹配a或b或c
范例:
能匹配到:apple banana
不能匹配到:king author 345%5

[0-9] #
匹配0到9中的一個(gè)數(shù)字 即[0123456789]
范例:
能匹配到:8777 0xEEEEE
不能匹配到:king author _icon%

在前面添加^,可表示非的意思

[^abc] 匹配abc外的所有字符中的一個(gè)
范例:
非法用戶(hù)名 [^a-zA-Z0-9_] 只允許大小寫(xiě)字母、數(shù)字、下劃線

正則規(guī)定的特殊字符,與上述一致

.   #匹配除換行外的任意一個(gè)字符
\w #匹配任意數(shù)字或字母或下劃線 [0-9a-Z_]
\d     #匹配任意一個(gè)數(shù)字 [0-9]

量詞

匹配多次某個(gè)字符

正則中的量詞有多個(gè),如?、+、*、{n}、{m,n}、{m,}

{n} 匹配n次
a{2} 匹配aa
{m,n}   匹配m次 - n次 優(yōu)先匹配n次
b{2,4} 匹配bb,bbb,bbbb 優(yōu)先匹配bbbb
{m,} 匹配m-∞次,優(yōu)先匹配∞次,比如a{1,},可以匹配aaaa...
? 匹配0次或1次,優(yōu)先匹配1次,相當(dāng)于{0,1}
+ 匹配1-n次,優(yōu)先匹配n次,相當(dāng)于{1,}
* 匹配0-n次,優(yōu)先匹配n次,相當(dāng)于{0,}

正則默認(rèn)和人心一樣是貪婪的,也就是常說(shuō)的貪婪模式,凡是表示范圍的量詞,都優(yōu)先匹配上限而不是下限
有時(shí)候這不是我們想要的結(jié)果,可以在量詞后面加上?,就可以開(kāi)啟非貪婪模式
a{1, 3}? // 匹配字符串'aaa'的話,會(huì)匹配a而不是aaa

范例:
匹配六個(gè)字符的16進(jìn)制數(shù)
[0-9A-F]{6}

字符邊界

有時(shí)我們會(huì)有邊界的匹配要求,比如已xxx開(kāi)頭,已xxx結(jié)尾

^在[]外 表示 匹配開(kāi)頭的意思
^abc // 可以匹配abc,但是不能匹配aabc

$ 表示 匹配結(jié)尾的意思
abc$ // 可以匹配abc,但是不能匹配abcc

上面提到的\b表示單詞的邊界

abc\b // 可以匹配 abc ,但是不能匹配 abcc

范例:匹配國(guó)內(nèi)手機(jī)號(hào)
^1[3-9][0-9]{9}

選擇表達(dá)式

有時(shí)我們想匹配x或者y,如果x和y是單個(gè)字符,可以使用字符集,[abc]可以匹配a或b或c,如果x和y是多個(gè)字符,字符集就無(wú)能為力了,此時(shí)就要用到分組

正則中 用|來(lái)表示分組,a|b表示匹配a或者b的意思

123|456|789 // 匹配 123 或 456 或 789

[ ] 單個(gè)字符 | 多個(gè)字符

分組與引用

分組是正則中非常強(qiáng)大的一個(gè)功能,可以讓上面提到的量詞作用于一組字符,而非單個(gè)字符,分組的語(yǔ)法是圓括號(hào)包裹(xxx)

(abc){2} // 匹配abcabc

分組不能放在[]中,分組中還可以使用選擇表達(dá)式

(123|456){2} // 匹配 123123、456456、123456、456123

和分組相關(guān)的概念還有一個(gè)捕獲分組和非捕獲分組,分組默認(rèn)都是捕獲的,在分組的(后面添加?:可以讓分組變?yōu)榉遣东@分組,非捕獲分組可以提高性能和簡(jiǎn)化邏輯

 

和分組相關(guān)的另一個(gè)概念是引用,比如在匹配html標(biāo)簽時(shí),通常希望<xxx></xxx>后面的xxx能夠和前面保持一致

引用的語(yǔ)法是\數(shù)字,數(shù)字代表引用前面第幾個(gè)捕獲分組,注意非捕獲分組不能被引用

<([a-z]+)><\/\1> // 可以匹配 `<span></span>` 或 `<div></div>`等

回溯

回溯允許引用之前捕獲的子字符串。

匹配第一組可以使用 \1,匹配第二組可以使用 \2,依此類(lèi)推…

 


提交成功!非常感謝您的反饋,我們會(huì)繼續(xù)努力做到更好!

這條文檔是否有幫助解決問(wèn)題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問(wèn)題: