正則表達式學習 — 02
摘要
本文主要敘述了正則的三種模式、分組以及引用替換。
目錄
1.正則的三種模式
正則有三種模式,分別為貪婪模式、非貪婪模式和獨佔模式。
1.1 貪婪模式
貪婪模式是:儘可能多的去匹配,表示次數的量詞默認是貪婪的,
1.2 非貪婪模式
非貪婪模式:儘可能少的去匹配,量詞後面加上?
表示非貪婪模式。
1.3 獨佔模式
獨佔模式:貪婪模式和非貪婪模式都是要進行回溯,獨佔模式不需要進行回溯。表示方法為量詞後面加上+
。
獨佔模式性能比較好,可以節約匹配的時間和 CPU 資源,但有些情況下並不能滿足需求。
2.正則中的分組
括號在正則中可以用於分組和復用。
2.1 分組
由多個元字符組成某個部分,應該被用作一個整體的時候,可以用括號括起來表示一個整體。被括號括起來的部分看作一個子組,第幾個括號就是第幾組。
例如:用來匹配日期2021-11-27
可以使用正則(\d{4})-(\d{2})-(\d{2})
來進行匹配。這裏面就有三個分組,分別為第一組表示年、第二組表示月、第三組表示日。
存在括號嵌套的情況,可以使用左括號的順序作為分組的順序,即第幾個左括號就是第幾組。
例如((\d{4})-(\d{2})-(\d{2}))
,同樣可以用來匹配日期,這裏面就存在四組,第一組表示日期,第二組表示年,第三組表示月,第四組表示日。
2.2 不保存子組
當你在正則中使用了括號,就會默認將括號里的內容保存為子組,這樣可以為後續使用提供方便。但是某些情況下,僅僅只是想將這部分看作一個整體,後續並不進行復用,這樣我們可以在括號中加入?:
來不保存子組,即(?:正則)
.
不保存分組可以理解為:括號只用於把某個部分當成「單個元素」,不分配編號,後面不會再進行這部分的引用。
正則中出現了括號,那麼我們就認為,這個子表達式在後續可能會再次被引用,所以不保存子組可以提高正則的性能.
2.2 分組命名
如果想讓一個分組不因為括號的增減而導致經常性的進行引用的修改,則可以對此分組進行命名,命名規則:(?P<分組名>正則)
.
3 分組引用和替換
大部分情況下,我們就可以使用 「反斜扛 + 編號」,即 \number
的方式來進行引用,而 JavaScript 中是通過$
編號來引用,如$1
。
編程語言 | 查找 | 替換 |
---|---|---|
Pythen | \number | \number |
Go | 不支持 | 不支持 |
Java | \number | $number |
JavaScript | $number | $number |
PHP | \number | \number |
Ruby | \number | \number |
版權聲明
本文原創作者:ereson
博客地址 ://ereson.github.io/