正则表达式 - 如果组有前缀则忽略

Regex - Ignore if group has prefix

我正在尝试捕获自由文本中的 8 位 phone 数字。如果之前出现特定字符串,则应忽略此选项。

我的正则表达式:

(\b(\+?001|002)?[-]?\d{4}(-|\s)?\d{4}\b)

要捕获:

+001 12345678
12345678

未捕获:

TTT-12345678-123
TTT-12345678

我正在尝试使用负向后视,如下例所示:

\w*(?<!foo)bar

但只有当正则表达式没有后续组时以上才有效。

您可以使用

(?<!TTT-)(?<!\w)(?:\+?001|002)?[-\s]?\d{4}[-\s]?\d{4}\b

regex demo

详情

  • (?<!TTT-) - 不允许 TTT- 紧靠左侧
  • (?<!\w) - 左边不允许出现字符字符
  • (?:\+?001|002)? - 可选的非捕获组匹配 +001001002
  • 的 1 次或 0 次出现
  • [-\s]? - 一个可选的 - 或空格
  • \d{4} - 任意四位数字
  • [-\s]?\d{4} - - 一个可选的 - 或空格和任意四位数字
  • \b - 单词边界。

如果数字可以粘在右边的单词字符上,请将 \b 单词边界替换为右侧数字边界,(?!\d)