1. 程式人生 > >正則表示式–零寬斷言-趙興壯

正則表示式–零寬斷言-趙興壯

零寬斷言的意思是(匹配寬度為零,滿足一定的條件/斷言) 我也不知道這個詞語是誰發明的,簡直是太拗口了。 

零寬斷言用於查詢在某些內容(但並不包括這些內容)之前或之後的東西,也就是說它們像\b,^,$那樣用於指定一個位置,這個位置應該滿足一定的條件(即斷言),因此它們也被稱為零寬斷言。 

斷言用來宣告一個應該為真的事實。正則表示式中只有當斷言為真時才會繼續進行匹配。 

其中零寬斷言又分四種 

  • 先行斷言   也叫零寬度正預測先行斷言(?=表示式)          表示匹配表示式前面的位置 


例如 [a-z]*(?=ing) 可以匹配cooking singing 中的cook與sing 

注意:先行斷言的執行步驟是這樣的先從要匹配的字串中的最右端找到第一個ing(也就是先行斷言中的表示式)然後 再匹配其前面的表示式,若無法匹配則繼續查詢第二個ing 再匹配第二個 ing前面的字串,若能匹配 則匹配 

例如:.*(?=ing) 可以匹配cooking singing 中的cooking sing 而不是 cook 

  • 後發斷言        也叫零寬度正回顧後發斷言        (?<=表示式)   表示匹配表示式後面的位置 

例如(?<=abc).* 可以匹配abcdefg中的defg        

注意:後發斷言跟先行斷言恰恰相反 它的執行步驟是這樣的:先從要匹配的字串中的最左端找到第一個abc(也就是先行斷言中的表示式)然後 再匹配其後面的表示式,若無法匹配則繼續查詢第二個abc 再匹配第二個abc後面的字串,若能匹配 則匹配 

例如(?<=abc).* 可以匹配abcdefgabc中的defgabc 而不是abcdefg 

負向零寬斷言 

負向零寬斷言 (?!表示式) 也是匹配一個零寬度的位置,不過這個位置的“斷言”取表示式的反值,例如 (?!表示式) 表示 表示式 前面的位置,如果 表示式 不成立 ,匹配這個位置;如果 表示式 成立,則不匹配:同樣,負向零寬斷言也有“先行”和“後發”兩種,負向零寬後發斷言為 (?<!表示式) 

    • 負向零寬後發斷言(?<!表示式) 
    • 負向零寬先行斷言 (?!表示式) 

負向零寬斷言要注意的跟正向的一樣

相關推薦

表示式斷言-

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

表示式斷言

零寬斷言:用於查詢在某些內容(但並不包括這些內容)之前或之後的東西,也就是說它們像\b,^,$那樣用於指定一個位置,這個位置應該滿足一定的條件(即斷言)。 分類 程式碼/語法 說明 零寬斷言

【轉】表示式斷言詳解

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

表示式斷言詳解

在使用正則表示式時,有時我們需要捕獲的內容前後必須是特定內容,但又不捕獲這些特定內容的時候,零寬斷言就起到作用了。 一.基本概念: 零寬斷言正如它的名字一樣,是一種零寬度的匹配,它匹配到的內容不會儲存到匹配結果中去,最終匹配結果只是一個位置而已。 作用是給指定位置新增

表示式-斷言

題目很簡單,對字串進行校驗,規則如下:1.長度至少有6位2.包含小寫字母3.包含大寫字母4.包含數字5.僅由數字和字母組成對於2.3.4這3個條件,沒辦法寫在一個正則裡面,於是搜尋發現了零寬斷言這種正則形式,這種形式是以括號包起來的子表示式存在的,由以下兩種形式:正向零寬斷言

表示式的先行斷言、後行斷言

實際開發中經常會遇到這樣的情況,需要在一組字串中取出指定的字元,例如:取出如下一段程式碼裡和html標籤<div><h2>title</h2><p>content</p></div>理想的結果是:['di

表示式正反向斷言

非獲取匹配: 首先要了解組group的概念,用()包含的是組,裡面的資料會獲取供以後使用,這叫獲取匹配,通過Match.group(index)獲取,第一個group從1開始,index=0表示獲取整個匹配字串。下面講的都是非獲取匹配。正向表示匹配前面,反向表示匹配後面。

關於表示式的先行斷言(lookahead)和後行斷言(lookbehind)的理解

正則表示式的先行斷言和後行斷言一共有4種形式:  (?=pattern) 零寬正向先行斷言(zero-width positive lookahead assertion)  (?!pattern) 零寬負向先行斷言(zero-width negative lookahe

表示式的先行斷言與後行斷言

正則表示式的先行斷言和後行斷言一共有4種形式:  (?=pattern) 零寬正向先行斷言(zero-width positive lookahead assertion)  (?!pattern) 零寬負向先行斷言(zero-width negative lookahe

js表示式中關於斷言的奇異現象

碰到一個特別的需求,就是有一段Sql Server 的 SQL片段,內容大概就是所有JOIN表的集合,要求把這個SQL片段分割成陣列,每個元素就是包含單個表的字串。 例如: SQL = INNER JOIN Sale b ON 1=1 LEFT JOIN OutStock c

表示式斷言

正則表示式之零寬斷言 用於查詢在某些內容(但並不包括這些內容)之前或之後的東西 零寬度正預測先行斷言 - (?=exp) 匹配exp前面的位置 正則表示式:.+(?=://) 原始字串:http://localhost:8080/awesome-g

js表示式中的斷言

首先要說的是js正則表示式只支援零寬先行斷言,而零寬先行斷言又可以分為正向零寬先行斷言(判斷字元後面必須匹配regexp)和負向零寬先行斷言(判斷字元後面不能匹配regexp) 正向零寬先行斷言 例: var str = 'abABb' var regexp = /

python表示式斷言

零寬斷言 零寬斷言一共分為正向和反向兩類,每類又分為預測先行和回顧後發兩種:   ####零寬度正預測先行斷言   簡稱正向先行斷言,語法是(?=exp),它斷言此位置的後面能匹配表示式exp。   ####零寬度正回顧後發斷言   簡稱正向後發斷言,

[表示式] 預搜尋(斷言)詳解

什麼是零寬斷言? 零寬斷言的意思是(匹配寬度為零,滿足一定的條件/斷言) 我也不知道這個詞語是那個王八蛋發明的,簡直是太拗口了。 零寬斷言用於查詢在某些內容(但並不包括這些內容)之前或之後的東西,也就是說它們像 \b ^ $ \< \> 這樣的錨定作用,僅僅用

JavaScript表示式(基礎、分組、懶惰匹配、反向引用和斷言

進階 懶惰匹配 分組 反向引用 零寬斷言 練習 基礎 常用字元總結: ^ 匹配行的開始位置 $ 匹配行的結束位置 \b 匹配單詞的開始或結束位置 . 匹配除換行符之外的任意字元 \w 匹配單詞字元(包括字母、數字、

老男孩帶你了解perl表達式中的斷言

表達式 老男孩 positive 如圖所示 1.1 前言本文只介紹perl語言正則表達式的零寬斷言功能。零寬斷言實質:匹配文本裏面的位置。零寬斷言叫zero-length assertions,也叫lookaround(這個更容易理解)。包括:lookahead(向前看,零寬度正預測先行斷言)

grep斷言&表達式

grep零寬斷言 正則表達式 一、grep零寬斷言:(匹配寬度為零,滿足一定的條件/斷言) 零寬斷言用於查找在某些內容(但並不包括這些內容)之前或之後的東西,也就是說它們像 \b ^ $ \< \> 這樣的錨定作用,用於指定一個位置,這個位置應該滿足一定的條件(即斷言),因此它們也被稱為零

匹配之斷言

當我們需要匹配一些字元,這些字元之前或者之後必須是特定內容的情況時,最明智的一種解決方案應該是零寬斷言了。 定義 用於給指定位置新增限定條件(斷言),在這個位置之前或者之後滿足這個限定條件時,該斷言成功。 當斷言失敗時不會再繼續匹配,當斷言匹配成功後正則表示式中的其他匹配才會繼續。 斷言部分也可以是一

開始的Python學習Episode 15——表示式

正則表示式   正則表示式(或 RE)是一種小型的、高度專業化的程式語言,(在Python中)它內嵌在Python中,並通過 re 模組實現,所以使用時要匯入re模組。正則表示式模式被編譯成一系列的位元組碼,然後由用 C 編寫的匹配引擎執行。   先說幾個元字元 &nbs

開始學Python【2】--數值計算及表示式

往期回顧: 從零開始學Python【1】--資料型別及結構 我們接著上一期的Python,繼續跟大家分享有關Python中常用的數值計算和正則表示式。 運算子 1)數值運算 +、-、*、/ % (求餘數) // (注意Python中的整除是