正則表達式中組的理解

在正則中,「組」表示一個總體,可分爲捕獲組和非捕獲組。咱們能夠結合生活中的例子來理解它,好比一部手機,組內的因素有必需和非必需之分,如手機能夠有操做系統,也能夠沒有,但必定要有電池。正則表達式

下面舉例說明:性能

這是驗證郵箱的正則表達式:spa

[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

這個正則涉及了多個非捕獲組,如今咱們以@(?:[\w](?:[\w-]*[\w])?\.)+中的(?:[\w](?:[\w-]*[\w])?\.)+爲例,這是驗證郵箱地址中@符號後包括.部分的字符,如字符串@abc.com,這個表達式就是驗證abc.,如今在這個表達式中把這部分驗證做爲一個總體,其中必需因素包括[\w].,便是說這部分字符串最基本包括如@a.com。因爲這個組的量詞爲+,因此它能夠爲@a.a.a.com操作系統

如今再來看一下這個表達式裏面的一個非捕獲組(?:[\w-]*[\w])?。在示例字符串@a.com中,a.@com之間最起碼的要素,在a.之間能夠容許[w]-符號出現0次或屢次,若是僅此要求,這裏寫做(?:[\w-]*)就行了,關鍵是結尾不容許是-符號,能夠是[\w][\w]即爲這個組的必須因素,這個組的量詞爲?,表示它能夠不出現或出現一次。舉例子,郵箱中的字符串@a-b.是容許的,而@a-.是不容許的,由於-這個組中缺乏必須因素[\w]code

小結
1.當咱們要對正則中的某個子表達式的非必須要素和必須要素進行定義時每每就須要用組。2.若是一個正則中涉及到了多個組而這些組無需捕獲則建議採用非捕獲組,這樣提升了正則引擎的性能。
相關文章
相關標籤/搜索