只有当组的长度与指定的长度完全一致时,是否有返回组的方法

本文关键字:返回 方法 是否 | 更新日期: 2023-09-27 18:21:59

以下正则表达式

('d{3,4})

匹配中的1234

123456,但由于123456比4长,我不希望正则表达式与任何内容匹配。

这是我单独使用的3个正则表达式,我尝试将它们组合,但它返回了2个以上的组,我最多只需要2个。

//Match card number before security code
(?<!'d)('d{13,16})(?!'d)[<""'].*?(?=[>""']'d{3,4}[<""'])[>""'](?<!'d)('d{3,4})(?!'d)[<""']
//Match card number after security code
(?<!'d)('d{3,4})(?!'d)[<""'].*?(?=[>""']'d{13,16}[<""'])[>""'](?<!'d)('d{13,16})(?!'d)[<""']
//Match just card number
(?<!'d)('d{13,16})(?!'d)

只有当组的长度与指定的长度完全一致时,是否有返回组的方法

(?<!'d)('d{3,4})(?!'d)

应该做到这一点。由于?<!?!断言是零宽度,因此它们实际上并不匹配任何内容(它们只是根据当前位置的输入检查解析状态)。所以你也可以说

((?<!'d)'d{3,4}(?!'d))

如果你愿意的话。


请参阅http://www.regular-expressions.info/refadv.html

(?!regex)

零宽度负前瞻。与正向前瞻相同,只是只有当前瞻中的正则表达式不匹配时,整体匹配才会成功。

使用''b标记字符串的开始和结束,a la

''b''d{3,4}''b

试试这个:('b'd{3,4}'b) 'b字符表示单词边界。如果您只想要任何非数字字符,请尝试'D('d{3,4})'D