此问题已经在这里有了答案:
我需要一个正则表达式,该正则表达式必须与16个连续的数字完全匹配,无论周围有什么(如果有的话),都不会多多少少。我经历了几次迭代,但是都遇到了问题:
\d{16}
将匹配任何连续的16位数字,包括更长的数字串中的16位数字^\d{16}$
将匹配正好是连续16位数字的行,但是如果字符串中还有其他内容,则匹配将失败]\D\d{16}\D
将匹配由16个连续数字组成的字符串,但前提是它被非数字字符包围。如果一行中只有16位数字的字符串,则失败\D?\d{16}\D?
将匹配更长的连续数字字符串[\D^]\d{16}[\D$]
不会将^
和$
视为特殊含义,而是将它们视为文字字符。如何创建所需的正则表达式?
编辑:这些是PCRE正则表达式
这接近您想要的Regex demo
,除了您所指出的以外,它抓住16位数字序列周围的非数字。使用D\d{16}\D
对其进行修改,以将非数字用作锚,而不将它们包括在匹配项中:
a lookbehind and a lookahead
(?<!\d)\d{16}(?!\d)
这里的关键是积极的展望。这些可以验证非数字字符而不捕获它们。
(?<=\D|^)\d{16}(?=\D|$)
确保比赛之后是一个非数字字符或字符串的开头(?<=\D|^)
精确捕获16位数字\d{16}
确保匹配后的是一个非数字字符或字符串的结尾(?=\D|$)
[您很可能正在寻找(?<!\d)\d{16}(?!\d)
将正则表达式包装为:
boundary matchers
这将允许在同一行中包含更多字符,但是当16位数字的两边都带有文字字符时将不匹配。
如果可以有文字字符的另一种选择是使用\b\d{16}\b
禁止在比赛双方的数字:
look arounds