正規表示式 零寬斷言學習筆記

2022-03-01 23:14:19 字數 1480 閱讀 3539

正規表示式的強大之處也不需要我多說了,資料採集中使用的最多. 學點基本的正則語法,完全足夠在工作中使用了.

不過工作歸工作,修煉還是要的. 那麼今天就學習了下零寬斷言的使用,以及記錄一下筆記.

零寬斷言是正規表示式中的一種方法,又稱"環視".

斷言用來聲音乙個應該為真的事實.在正則中只有當斷言為真時才會繼續進行匹配.

零寬斷言和非捕獲模式一樣(?:)只匹配內容,不捕獲內容,即不屬於分組內容.

來看看零寬斷言(環視)的幾種:

順序肯定環視(?=exp)

零寬度正**先行斷言,又稱順序肯定環視,斷言自身出現位置的後面能匹配表示式exp.

書本上理論總是讓人一臉懵逼還是用**來說話吧.

正則規則如下:

regular:\w+(?=ing)

text: dancing,singing

result:danc,sing

這條正則斷言了在符合\w+的規則之後一定會有ing字串的字串才是被匹配到的.但是ing不在捕獲範圍內,所以只匹配到danc和sing.途中高亮的字串就是匹配到結果

上面那個還是挺好理解的.我們來看下乙個

逆序肯定環視(?<=exp)

零寬度正回顧後發斷言,又稱逆序肯定環視,斷言自身出現位置的前面能匹配表示式exp.

regular:(?<=test)regular

text:testregular,regular

result:這裡只匹配到testregular中的regular,但是不匹配單獨的regular

在regular表示式之前,如果匹配了斷言中的test,那麼該字串才會被匹配捕獲到.和上面一樣,逆序肯定環視中的規則也不在分組匹配範圍內,只起到匹配內容不捕獲的效果.

昨天學習了順逆序肯定環視,今天來學習下順逆序否定環視.

順序否定環視 (?!exp)

零寬度負**先行斷言,又稱順序否定環視.斷言自身位置出現的後面不能匹配exp表示式.

regular:(?!首頁).*?

text:

首頁關於我

result:

match 2: 關於我

這個表達起來有點難,可能是因為我的表達能力不好.但是理解很容易,就是和順序肯定環視是相反的,順序肯定環視是自身位置出現的後面的字串能和exp表示式匹配,順序否定環視則相反.上面的例子就可以說明了,不和"首頁"二字匹配的,有兩條記錄.來看個圖

逆序否定環視(?.*?

text:

test1首頁

result:

只匹配到了前面的字串不能和'test1'匹配成功的一行字串.其實用心去理解很快就理解了,我也要提高下表達能力..總感覺我表達的文字,很拗口.

ps:順逆序肯定環視/順逆序否定環視中的表示式都不在捕獲範圍內,只是起到乙個匹配驗證的作用.

正規表示式 零寬斷言

零寬斷言的意思是 匹配寬度為零,滿足一定的條件 斷言 零寬斷言用於查詢在某些內容 但並不包括這些內容 之前或之後的東西,也就是說它們像 b 這樣的錨定作用,用於指定乙個位置,這個位置應該滿足一定的條件 即斷言 因此它們也被稱為零寬斷言。斷言用來宣告乙個應該為真的事實。正規表示式中只有當斷言為真時才會...

正規表示式 零寬斷言

今天在codewars.com做練習,遇到乙個正規表示式相關的題目regex password validation 題目很簡單,對字串進行校驗,規則如下 1.長度至少有6位 2.包含小寫字母 3.包含大寫字母 4.包含數字 5.僅由數字和字母組成 對於2.3.4這3個條件,沒辦法寫在乙個正則裡面,...

正規表示式 零寬斷言

接下來的四個用於查詢在某些內容 但並不包括這些內容 之前或之後的東西,也就是說它們像 b 那樣用於指定乙個位置,這個位置應該滿足一定的條件 斷言 因此它們也被稱為零寬斷言。最好還是拿例子來說明吧 exp 也叫零寬度正 先行斷言,它斷言自身出現的位置的後面能匹配表示式exp 比如 b w ing b ...