正規表示式中斷言的使用以及簡單例子

2021-09-29 15:09:40 字數 1577 閱讀 6703

先行斷言(零寬度正**先行斷言)

後發斷言(零寬度正回顧後發斷言)

負向斷言()表示捕獲分組,()會把每個分組裡的匹配的值儲存起來,從左向右,以分組的左括號為標誌,第乙個出現的分組的組號為1,第二個為2,以此類推

(?:)表示非捕獲分組,和捕獲分組唯一的區別在於,非捕獲分組匹配的值不會儲存起來

可以看到使用 (?:pattern) 後匹配的第乙個 [0-9] 沒有儲存下來。python中group(0)返回整體。

這在使用 「或」 字元 (|) 來組合乙個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就是乙個比 『industry|industries』 更簡略的表示式。

正向肯定預查(look ahead positive assert),匹配pattern前面的位置。這是乙個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。

簡單說,以 ***(?=pattern)為例,就是捕獲以pattern結尾的內容***

例如,「windows(?=95|98|nt|2000)「能匹配"windows2000"中的"windows」,但不能匹配"windows3.1"中的"windows」。預查不消耗字元,也就是說,在乙個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始。

(?=pattern)和(?:pattern)的區別可以參考:

正向否定預查(negative assert),在任何不匹配pattern的字串開始處匹配查詢字串。這是乙個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。

簡單說,以 ***(?!pattern)為例,就是捕獲不以pattern結尾的內容***

例如"windows(?!95|98|nt|2000)「能匹配"windows3.1"中的"windows」,但不能匹配"windows2000"中的"windows"。預查不消耗字元,也就是說,在乙個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始。

反向(look behind)肯定預查,與正向肯定預查類似,只是方向相反。

簡單說,以(?<=pattern)***為例,就是捕獲以pattern開頭的內容***。

例如,"(?<=95|98|nt|2000)windows"能匹配"2000windows"中的"windows",但不能匹配"3.1windows"中的"windows"。

簡單說,以(?反向否定預查,與正向否定預查類似,只是方向相反。例如"(?

正規表示式 斷言

密碼的正規表示式,要求是密碼8 16位,必須包含數字大小寫字母以及特殊字元 高人寫的 pwd pattern a z a z a za z0 9 經過學習,分析如下 a z 斷言,只匹配乙個位置 比如,你想匹配乙個 人 字,但是你只想匹配中國人的人字,不想匹配法國人的人,就可以用 中國 人 a z ...

正規表示式之斷言

零寬斷言的意思是 匹配寬度為零,滿足一定的條件 斷言 我也不知道這個詞語是那個王八蛋發明的,簡直是太拗口了。零寬斷言用於查詢在某些內容 但並不包括這些內容 之前或之後的東西,也就是說它們像 b,那樣用於指定乙個位置,這個位置應該滿足一定的條件 即斷言 因此它們也被稱為零寬斷言。斷言用來宣告乙個應該為...

正規表示式之斷言

exp 零寬度正先行斷言 零寬度正先行斷言為例 先行 表示待校驗的位置在前,即校驗的位置在exp匹配的內容之前 d 表示校驗的位置後面是三個數字 d 表示校驗的位置後接著的是數字 表示校驗的位置後字串長度為5,因為加了字串開頭和結尾的元符號,所以這個表示式作用其實就是匹配長度為5的字串。由上面例子可...