如果包含在 23 位元數字字串中,正規表示式會忽略符合項

如果包含在 23 位元數字字串中,正規表示式會忽略符合項

我在解決某種情況時遇到問題,我有這個正規表示式來匹配特定的數字序列:

(102030)\d{10}

使用它作為測試數據,我得到以下匹配:

75277887243040354513001
55345377243014107206375
810203087654135168       <- Match
1102030698798798477      <- Match
71020307248040361799581  <- Match

我想做的是忽略字串中有 23 位數字的情況,僅使用正規表示式可以嗎?我嘗試過消極展望,但未能實現。

答案1

為了展望未來,你需要先做一些事情 - 所以讓我們開始

\d

然後在接下來的 22 位數字前面加上負數:

(?!\d{22})

我們過濾掉所有 23 位數字的行。然後可能會跟隨你原來的字串

(102030)\d{10}

所以完整的正規表示式將是

\d(?!\d{22})(102030)\d{10}

查看結果正規表示式101.com:

在此輸入影像描述

答案2

\b(?!\d{23}\b)\d*((102030)\d{10})\d*\b

這捕獲了第一個子組中的比賽。

相關內容