分析regexp时出错Perl语法无效或不受支持:`(?!`

bweufnob  于 2022-12-01  发布在  Perl
关注(0)|答案(1)|浏览(334)

我正在使用此正则表达式验证电话号码和电子邮件,但我得到Perl语法错误,有人能帮助我在这里使用什么吗

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

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

lymnna71

lymnna711#

您没有使用Perl;您使用的是RE 2,虽然它与Perl类似,但它是not quite compatible
具体来说,它不能处理你提供的模式。这就是消息所说的。你需要提供RE 2可以处理的东西。
以下为相关部分:

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

在Perl中,它检查一个5-16位数的字符串,该字符串后面可以选择性地跟随换行符,但要注意前三位数不能相同。
这与[1]等效,并将在RE 2中工作:

^
(?: 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

我不知道RE 2,所以可能有一个更好的解决方案。
1.假设\d应该匹配[0-9],实际上匹配的要多得多。

相关问题