正規表示式零寬斷言在php中的問題

2021-07-29 10:50:52 字數 731 閱讀 6501

最近在學習正規表示式,有乙個這樣的正則:

"#(?<=<(\w+)>).*(?=<\/\1>)#
「用來匹配像html標籤裡面的內容。類似

aaadiv>中的aaa,
但是在php中測試的時候:

$reg='#(?<=<(\w+)>).*(?=<\/\1>)#';

preg_match_all($reg,$cont,$arr);

var_dump($arr);

測試的時候會報

warning: preg_match_all(): compilation failed: lookbehind assertion is not fixed length .

編譯不定長錯誤。就感覺很奇怪了,在下了個測試工具測試可以,就上管網查下資料,php官網

上面寫的是:後瞻斷言的內容被嚴格限制為只能用於匹配定長字串。

那就可以換個寫法:

'#(?<=<(a)>|<(div)>).*(?=<\/a>|<\/div>)#'
這樣可以解決錯誤了,再用php處理下這個正則字串就可以了,一般的寫法

是用陣列儲存標籤名稱,在替換成類似上面的格式,就可以查出來結果:

array(3)  [1]=> array(1)  [2]=> array(1)  }

正規表示式 零寬斷言

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

正規表示式 零寬斷言

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

正規表示式 零寬斷言

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