如何修改正则表达式,避免匹配跨多行的15位数字组合?
解决正则跨多行匹配的问题
原正则表达式 \d(?:\D?\d){14}(?!\d) 之所以会错误匹配跨多行的数字组合,核心原因是 \D 会匹配包括换行符在内的所有非数字字符,导致分散在不同行的数字能被凑够15个完成匹配。
要解决这个问题,只需把正则里的 \D 替换为排除换行符的非数字字符集合 [^\d\n],这样就限制了非数字分隔符只能是同一行内的字符,不会跨越多行。
修改后的正则表达式:
\d(?:[^\d\n]?\d){14}(?!\d)
效果验证
- 原有的正确匹配示例(同一行内的数字+非数字组合)依然可以正常命中:
#19-04-052-320-008-5519 04 052 320 008 7519/04/052/320/0/0/8/8/0190405232000895
- 跨多行的数字组合(比如你给出的分散在多行的数字串)会被直接排除,因为换行符不再被当作允许的非数字分隔符,无法将不同行的数字凑成符合要求的15位序列。
内容的提问来源于stack exchange,提问作者DanielAttard
相关产品推荐
相关产品推荐

