使用regexp验证IPv4地址

使用regexp验证IPv4地址

我一直试图获得有效的IPv4验证正则表达式,但没有太多运气。似乎我曾经有过它(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4},但它会产生一些奇怪的结果:


$ grep --version

grep (GNU grep) 2.7

$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.1

192.168.1.1

$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.255

192.168.1.255

$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.255.255

$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.2555

192.168.1.2555

我做了一个搜索,看看是否已经被问及回答,但其他答案似乎只是显示如何确定4组1-3个数字,或者不适合我。


FFIVE
浏览 547回答 3
3回答

慕桂英4014372

你已经得到了一个有效的答案,但万一你好奇你的原始方法出了什么问题,答案是你需要围绕你的交替使用括号,否则(\.|$)只有在数字小于200时才需要。'\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}\b'&nbsp; &nbsp; ^&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^

青春有我

正则表达式不是这项工作的工具。编写一个分隔四个数字的解析器并检查它们是否在[0,255]范围内会更好。非功能性正则表达式已经不可读了!
打开App,查看更多内容
随时随地看视频慕课网APP