正则表达式匹配不以字符串开头的数字

Regular expression match numbers not starting with string

我想出了一个正则表达式的需求,用于查找不以 COM 开头的数字。我尝试了以下表达式,但它没有按预期工作,并且 COM 的条件不工作。

(?!(COM|СОМ))\d{11,19}

https://regex101.com/r/Ap628q/1/

您需要负向后视 来检查字符串前面是否没有紧跟其他模式。此外,由于您要匹配一系列数字,因此您应该在正则表达式中包含数字边界 (?<!\d)(?!\d)

使用

(?<!COM|\d)\d{11,19}(?!\d)
(?<!COM)(?<!\d)\d{11,19}(?!\d)

regex demo。后者将与 Python 和 Boost 正则表达式库一起使用,这些库需要后视替代项来匹配相同长度的文本。

详情

  • (?<!COM) - 如果在当前位置
  • 的左侧紧邻 COM,则匹配失败的否定后视
  • (?<!\d) - 如果紧邻当前位置
  • 左侧有 as 数字,则匹配失败的负后视
  • \d{11,19} - 十一到十九位数字
  • (?!\d) - 如果当前位置右侧紧邻 as 数字,则匹配失败的否定前瞻。