我正在測試一個用于識別可能的信用卡號的簡化正則表達式,以便我們可以將它們過濾掉。我正在尋找 13-16 位數(shù)字,可以選擇在每個數(shù)字后使用任意數(shù)量的空格和“-”,并且整個序列被單詞邊界包圍。似乎這個正則表達式應該可以解決問題(選項 1): \b(?:\d[ -]*?){13,16}\b但是當我測試這個(在我的代碼(在 JavaScript 中)和在regex101.com 上)使用它的測試字符串時, 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6它只匹配1 2 3 4 5 6 7 8 9 0 1 2 3,即我的{13,16}量詞中最短的數(shù)字。我正在閱讀的所有內(nèi)容都表明它應該與可能的最長序列相匹配,但顯然不是。如果我將正則表達式更改為\b(?:\d[ -]*?){16}\b匹配所有 16 位數(shù)字(但當然不匹配 13-15 位數(shù)字)。我可以先使用最長序列的交替來解決這個問題,就像這樣(選項 2):\b(?:\d[ -]*?){16}|(?:\d[ -]*?){15}|(?:\d[ -]*?){14}|(?:\d[ -]*?){13}\b或者,如果我在第一次匹配 {12,15} 后顯式添加另一個組到最后,就像這樣(選項 3):\b(?:\d[ -]*?){12,15}(?:\d[ -]*?)\b如果其中之一是唯一的方法,我可以接受它,但它們都比更緊湊的選項 1 丑陋,而且我還想了解為什么選項 1 不像我想的那樣工作它會。就此而言,為什么選項 3 在它匹配的項目數(shù)量方面似乎表現(xiàn)不同?它匹配 15 位數(shù)字而不是 12 位數(shù)字。
正則表達式量詞匹配較短的序列
不負相思意
2021-06-30 01:31:30