【问题标题】:error parsing regexp invalid or unsupported Perl syntax: `(?!`错误解析正则表达式无效或不受支持的 Perl 语法:`(?!`
【发布时间】:2022-11-30 05:08:03
【问题描述】:

我正在使用此正则表达式验证电话号码和电子邮件,但我收到 perl 语法错误任何人都可以帮助我在这里使用什么

^(?:(\d)(?!\1{2}))\d{4,15}$|([A-Za-z0-9]+@[A-za-z]+\.[A-Za-z]{2,3})

我正在验证 4-15 之间的国际号码,并且还在验证连续重复的号码,例如 11111111111119999999999977777777777,我们不能使用超过 3 个重复的号码,我也在验证电子邮件一切正常,但对于重复数字 我必须使用 Perl 语法?!这就是为什么我收到错误请帮我解决这个问题

【问题讨论】:

  • 你没有使用 Perl;您使用的是类似于 Perl 的东西,但不太兼容。消息就是这么说的。我已经用正确的标签替换了 Perl 标签。
  • @ikegami 你替换的地方你能告诉我吗?
  • 你问标签在哪里?在问题正文的正下方

标签: regex re2 re2j


【解决方案1】:

你没有使用 Perl;你正在使用 RE2。虽然类似于 Perl,但它是 not quite compatible

具体来说,它无法处理您提供的模式。消息就是这么说的。您需要提供 RE2 可以处理的内容。


以下是相关部分:

^(?:(d)(?!{2}))d{4,15}$

在 Perl 中,它会检查是否有 5-16 位数字的字符串,可以选择后跟换行符,但要注意前三位数字不能相同。

这是等价的[1]并将在 RE2 中工作:

^
(?: 0 (?: 0 [1-9]    | [1-9]    [0-9] )
|   1 (?: 1 [02-9]   | [02-9]   [0-9] )
|   2 (?: 2 [0-13-9] | [0-13-9] [0-9] )
|   3 (?: 3 [0-24-9] | [0-24-9] [0-9] )
|   4 (?: 4 [0-35-9] | [0-35-9] [0-9] )
|   5 (?: 5 [0-46-9] | [0-46-9] [0-9] )
|   6 (?: 6 [0-57-9] | [0-57-9] [0-9] )
|   7 (?: 7 [0-68-9] | [0-68-9] [0-9] )
|   8 (?: 8 [0-79]   | [0-79]   [0-9] )
|   9 (?: 9 [0-8]    | [0-8]    [0-9] )
)
[0-9]{2,13}

?
z

我不知道 RE2,所以可能有更好的解决方案。


  1. 假设d 是为了匹配[0-9]。它实际上匹配得更多。

【讨论】:

  • 它也不起作用你能在这里验证吗regex101.com/r/gF6tT0/2
  • 嗯?这既不是您询问的模式,也不是我提供的模式。此外,regex101 不支持 RE2。这绝不表明我发布的内容不起作用。
  • 兄弟检查这个regex101.com/r/gF6tT0/2
  • 为什么你认为它是相关的?
猜你喜欢
  • 2016-12-20
  • 1970-01-01
  • 2023-01-02
  • 2019-04-05
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 2011-03-22
  • 2017-07-05
相关资源
最近更新 更多