正则表达式以匹配可能更大的字符串中的 16 个连续数字
regex to match exactly 16 consecutive digits in a potentially larger string
我需要一个正则表达式来精确匹配 16 个连续数字,不多也不少,不管它周围有什么(如果有的话)。我经历了几次迭代,但都遇到了问题:
\d{16}
将匹配任意 16 个连续数字,包括较长数字串中的 16 个数字
^\d{16}$
会匹配正好是 16 个连续数字的行,但如果字符串中有其他内容,则匹配失败
\D\d{16}\D
将匹配 16 个连续数字的字符串,但前提是它被非数字字符包围。如果16位的字符串单独上线则失败
\D?\d{16}\D?
将匹配更长的连续数字串
[\D^]\d{16}[\D$]
不把^
和$
当作它们的特殊含义,而是把它们当成文字字符。
如何创建我需要的正则表达式?
编辑:这些是 PCRE 正则表达式
(?<=\D|^)\d{16}(?=\D|$)
这里的关键是积极的环顾四周。这些可以验证非数字字符而不捕获它们。
(?<=\D|^)
确保匹配项后面是非数字字符或字符串的开头
\d{16}
恰好捕获 16 位数字
(?=\D|$)
确保匹配项后面是非数字字符或字符串结尾
您可以使用环顾四周
(?<!\d)\d{16}(?!\d)
(?<!\d)
- 匹配前不应有数字
\d{16}
- 匹配数字 (0 - 9) 16 次
(?!\d)
- 匹配后不应跟数字
这与您想要的很接近D\d{16}\D
,除了如您指出的那样,它会抓取 16 位数字序列周围的非数字。使用 a lookbehind and a lookahead 修改它以使用非数字作为锚点,而不将它们包含在匹配中:
(?<!\d)\d{16}(?!\d)
我需要一个正则表达式来精确匹配 16 个连续数字,不多也不少,不管它周围有什么(如果有的话)。我经历了几次迭代,但都遇到了问题:
\d{16}
将匹配任意 16 个连续数字,包括较长数字串中的 16 个数字^\d{16}$
会匹配正好是 16 个连续数字的行,但如果字符串中有其他内容,则匹配失败\D\d{16}\D
将匹配 16 个连续数字的字符串,但前提是它被非数字字符包围。如果16位的字符串单独上线则失败\D?\d{16}\D?
将匹配更长的连续数字串[\D^]\d{16}[\D$]
不把^
和$
当作它们的特殊含义,而是把它们当成文字字符。
如何创建我需要的正则表达式?
编辑:这些是 PCRE 正则表达式
(?<=\D|^)\d{16}(?=\D|$)
这里的关键是积极的环顾四周。这些可以验证非数字字符而不捕获它们。
(?<=\D|^)
确保匹配项后面是非数字字符或字符串的开头\d{16}
恰好捕获 16 位数字(?=\D|$)
确保匹配项后面是非数字字符或字符串结尾
您可以使用环顾四周
(?<!\d)\d{16}(?!\d)
(?<!\d)
- 匹配前不应有数字\d{16}
- 匹配数字 (0 - 9) 16 次(?!\d)
- 匹配后不应跟数字
这与您想要的很接近D\d{16}\D
,除了如您指出的那样,它会抓取 16 位数字序列周围的非数字。使用 a lookbehind and a lookahead 修改它以使用非数字作为锚点,而不将它们包含在匹配中:
(?<!\d)\d{16}(?!\d)