regex,以正好匹配可能更大的字符串中的16个连续数字[重复]

问题描述 投票:0回答:3

此问题已经在这里有了答案:

我需要一个正则表达式,该正则表达式必须与16个连续的数字完全匹配,无论周围有什么(如果有的话),都不会多多少少。我经历了几次迭代,但是都遇到了问题:

  1. [\d{16}将匹配任何连续的16位数字,包括更长的数字串中的16位数字
  2. [^\d{16}$将匹配正好是连续16位数字的行,但是如果字符串中还有其他内容,则匹配将失败]
  3. \D\d{16}\D将匹配由16个连续数字组成的字符串,但前提是它被非数字字符包围。如果一行中只有16位数字的字符串,则失败
  4. [\D?\d{16}\D?将匹配更长的连续数字字符串
  5. [[\D^]\d{16}[\D$]不会将^$视为特殊含义,而是将它们视为文字字符。

如何创建所需的正则表达式?

编辑:这些是PCRE正则表达式

regex pcre
3个回答
2
投票

您可以使用环顾四周

(?<!\d)\d{16}(?!\d)
  • [(?<!\d)-匹配项不应以数字开头
  • [\d{16}-匹配数字(0-9)16次]
  • [(?!\d)-匹配项后不应跟数字

Regex demo


2
投票

这接近您想要的Regex demo,除了您所指出的以外,它抓住16位数字序列周围的非数字。使用D\d{16}\D对其进行修改,以将非数字用作锚,而不将它们包括在匹配项中:

a lookbehind and a lookahead

1
投票

(?<!\d)\d{16}(?!\d)

这里的关键是积极的展望。这些可以验证非数字字符而不捕获它们。

  • [(?<=\D|^)\d{16}(?=\D|$)确保比赛之后是一个非数字字符或字符串的开头
  • [(?<=\D|^)精确捕获16位数字
  • [\d{16}确保匹配后的是一个非数字字符或字符串的结尾

(?=\D|$)


0
投票

[您很可能正在寻找(?<!\d)\d{16}(?!\d) 将正则表达式包装为:

boundary matchers

这将允许在同一行中包含更多字符,但是当16位数字的两边都带有文字字符时将不匹配。

如果可以有文字字符的另一种选择是使用\b\d{16}\b 禁止在比赛双方的数字:

look arounds
© www.soinside.com 2019 - 2024. All rights reserved.