我正在编写一个正则表达式来识别“A.B.C.D”形式的IP地址,其中A,B,C和D的值可以在0到255之间。允许前导零。 A,B,C或D的长度不能大于3.我知道这个正则表达式很容易在互联网上获得,但我自己写的是练习。
首先,我为A编写了正则表达式,如下所示:
a = ^(^0{0,2}\d|^0{0,1}\d\d|[0-1]\d\d|2[0-4]\d|25[0-5])$
它按预期工作,然后我为A.B写了如下:
ab = ^(^0{0,2}\d|^0{0,1}\d\d|[0-1]\d\d|2[0-4]\d|25[0-5])\.
(^0{0,2}\d|^0{0,1}\d\d|[0-1]\d\d|2[0-4]\d|25[0-5])$
但不知何故,它没有按预期工作。它不是识别像“2.3”这样的字符串而是识别“2.003”。这很奇怪。我花了好几个小时搞清楚但现在完全放弃了。请帮帮我。
答案 0 :(得分:2)
正如@Jorge在评论中指出的那样,^
字符匹配字符串/行的开头,这可能发生在A中,因为它可能是该行中的第一组字符,但不能发生对于B,因为它总是以A开头。这就是为什么它可以匹配003
(通过子模式[0-1]\d\d
),但它不能通过子模式与3
匹配^0{0,2}\d
。
删除多余的^
,你应该得到所需的行为:
ab = ^(0{0,2}\d|0{0,1}\d\d|[0-1]\d\d|2[0-4]\d|25[0-5])\.
(0{0,2}\d|0{0,1}\d\d|[0-1]\d\d|2[0-4]\d|25[0-5])