一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 正則表達式 - 正則表達式常見的4種匹配模式小結

正則表達式常見的4種匹配模式小結

2021-11-16 15:46容華謝后 正則表達式

今天一起來學習下正則中的匹配模式,所謂的匹配模式,就是指正則中的一些 改變元字符匹配行為 的方式,比如匹配時不區分英文字母的大小寫,具有一定的參考價值,感興趣的可以了解一下

0.寫在前面

今天一起來學習下正則中的匹配模式,所謂的匹配模式,就是指正則中的一些 改變元字符匹配行為 的方式,比如匹配時不區分英文字母的大小寫。

還記得我們在第二篇文章中學過的貪婪模式、非貪婪模式和獨占模式嗎,這些模式會改變正則中量詞的匹配行為,今天來看一些和量詞無關的匹配模式,一共有4種,分別是不區分大小寫模式、點號通配模式、多行匹配模式、注釋模式。

1.不區分大小寫模式

顧名思義,不區分大小寫模式就是我想要匹配目標字符串中的cat,我不關心是大貓cat,還是小貓cat,只要給我匹配上就可以了。

模式修飾符是通過 (?模式標識) 的方式來表示的,我們只需要把模式修飾符放在對應的正則前面,就可以使用指定的模式了,

不區分大小寫的英文是 case-insensitive,模式標識用首字母的小寫來表示就是 (?i),上面提到的栗子正則可以這么寫 (?i)cat,看下:

正則表達式常見的4種匹配模式小結

中,我們學習了分組與引用,如果匹配兩個貓就是 (?i)(cat) \1

正則表達式常見的4種匹配模式小結

對應的 python 代碼如下:

?
1
2
3
4
5
6
import re
 
result = re.findall(r"(?i)(cat) (\1)", "cat cat cat cat")
print(result)
 
輸出:[('cat', 'cat'), ('cat', 'cat')]

可以看到,前后兩個cat大小寫不一致,也可以匹配上,如果我們想要匹配前后大小寫一致的貓該怎么辦呢,可以在外面加上一層括號 ((?i)cat) \1,看下:

正則表達式常見的4種匹配模式小結

測試鏈接:https://regex101.com/r/tpxugx/1

注意:在 python 語言中,使用 re 庫調用上面的正則會報下面的異常,換成 regex 庫就可以,但是不能準確的匹配兩個大小寫一致的 cat。

deprecationwarning: flags not at the start of the expression

?
1
2
3
4
5
6
import regex
 
result = regex.findall(r"((?i)cat) (\1)", "cat cat cat cat")
print(result)
 
輸出:[('cat', 'cat'), ('cat', 'cat')]

2.點號通配模式

第一篇文章中,我們學習了元字符的相關知識,還記的英文的點 . 代表什么含義嗎,它可以匹配任意字符,但是不能匹配換行。當我們需要匹配真正的任意字符時,可以使用 [\s\s] 或 [\d\d] 或 [\w\w] 等來表示。

正則表達式常見的4種匹配模式小結

但是這樣寫不夠優雅,所以正則提供了一種模式,讓英文的 . 能夠匹配上換行在內的所有字符,這種模式就叫做點號通配模式。

點號通配模式,在很多地方被稱為單行模式,英文表示為 single line,取其首字母,所以單行模式對應的修飾符是 (?s),舉個栗子:

正則表達式常見的4種匹配模式小結

3.多行匹配模式

在正則中 ^ 用于匹配整個目標字符串的開頭,$ 用戶匹配整個目標字符串的結尾:

正則表達式常見的4種匹配模式小結

如果我們想要讓表達式匹配上每行的開頭和結尾呢,多行匹配模式就上場了,多行的英文是 multiline,所以多行模式對應的修飾符是 (?m),看下效果:

正則表達式常見的4種匹配模式小結

4.注釋模式

當我們寫了一大長串的表達式之后,當時可能只有你和上帝知道它什么意思,過了半年,就只有上帝知道它什么意思了。

注釋的英文是 comment,所以注釋模式對應的修飾符是 (?#comment),注意沒有用首字母,還多了一個 # 號,拿我們之前寫的 ipv4 地址匹配正則舉個例:

 

復制代碼 代碼如下:

^(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?#comment ip地址第一個值)(?:\.(?:0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}(?#comment ip地址后三個值)$

 

在很多編程語言中也提供了 x 模式來書寫正則,也可以起到注釋的作用,以 python 為例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
import re
 
regex = r'''(?mx)  # 使用多行模式和x模式
^          # 開頭
(\d{4})    # 年
(\d{2})    # 月
$          # 結尾
'''
 
result = re.findall(regex, '202006\n202106')
print(result)
 
輸出:[('2020', '06'), ('2021', '06')]

在 x 模式下,所有的換行和空格都會被忽略,如果要匹配的話,可以把換行和空格轉義,或者放在字符組中:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import re
 
regex = r'''(?mx)  # 使用多行模式和x模式
^          # 開頭
(\d{4})    # 年
[ ]        # 空格
(\d{2})    # 月
$          # 結尾
'''
 
result = re.findall(regex, '2020 06\n2021 06')
print(result)
 
輸出:[('2020', '06'), ('2021', '06')]

5.寫在最后

最后在總結下上面講到的內容:

正則表達式常見的4種匹配模式小結

正則表達式在線校驗工具:https://regex101.com/

到此這篇關于正則表達式常見的4種匹配模式小結的文章就介紹到這了,更多相關正則表達式 匹配模式內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/kong_gu_you_lan/article/details/119101667

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九久久国产精品大片 | 亚洲成人视屏 | 亚洲国产精品成人午夜在线观看 | 成人毛片1024你懂的 | sxx免费看观看美女 sss亚洲国产欧美一区二区 | 欧美日韩中文国产一区二区三区 | 黄动漫软件车车好快的车车 | 禁忌h1v1怀孕 | 毛片网在线观看 | 日本卡一卡2卡3卡4精品卡无人区 | 欧美一级视频在线观看 | 777奇米影视一区二区三区 | 牛牛影院成人免费网页 | 2012年免费中文视频 | 波多野结衣在线观看中文字幕 | 日韩欧美在线一区二区三区 | 9191久久 | 91你懂的 | 超级乱淫寡妇 | 无人影院在线播放视频 | 国内精品一区视频在线播放 | 娇喘嗯嗯 轻点啊视频福利 九九九九在线精品免费视频 | 免费看国产精品麻豆 | 香蕉91视频 | 人人揉揉香蕉 | 男人天堂a | 国产精品一区二区三 | 午夜影院免费入口 | 日韩专区在线观看 | 亚洲高清国产拍精品动图 | 男人天堂网址 | 天天躁天天碰天天看 | mm在线| 欧美人做人爱a全程免费 | 成人精品亚洲人成在线 | 搞逼综合网 | 调教禽兽| a级情欲片在线观看hd | 高跟翘臀老师后进式视频 | 亚洲啊v| 国产欧美精品一区二区三区 |