
我在解決某種情況時遇到問題,我有這個正規表示式來匹配特定的數字序列:
(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
這捕獲了第一個子組中的比賽。