解析正则表达式时出错,无效或不受支持的 Perl 语法:`(?!`

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

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

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

我正在验证 4-15 之间的国际号码,还验证连续重复的号码,例如

1111111111111
99999999999
77777777777
,我们不能使用超过 3 个重复号码,我也在验证电子邮件,一切都很好,但对于重复的数字我必须使用 Perl 语法?!这就是为什么我收到错误请帮我解决这个问题 perl syntax error ss

regex re2
1个回答
1
投票

你没有使用 Perl;你正在使用RE2。虽然与 Perl 类似,但它不太兼容

具体来说,它无法处理您提供的模式。

before text not matching re (NOT SUPPORTED)

这就是消息所说的内容。您需要提供 RE2 可以处理的东西。


相关部分如下:

^(?:(\d)(?!\1{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}
\n?
\z

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


  1. 假设
    \d
    旨在匹配
    [0-9]
    。它实际上更匹配。
© www.soinside.com 2019 - 2024. All rights reserved.