我正在尝试编写一个用于验证IP地址的正则表达式。
虽然这有效:
String reg = "((0|1)?\\d{1,2}|2[0-4]\\d|25[0-5])";
public String pattern = reg + "." + reg + "." + reg + "." + reg;
这似乎不起作用,我不明白出了什么问题。
String pattern = "((0|1)?\\d{1,2}|2[0-4]\\d|25[0-5]\\.){3}((0|1)?\\d{1,2}|2[0-4]\\d|25[0-5])";
请解释我错过了什么。
答案 0 :(得分:4)
您没有正确分组:点\\.
是25[0-5]
制作的一部分,因此除非地址仅由{25x
生成,否则它不会在您的三部分组中间匹配{1}}组件。
您的第一个正则表达式不存在此问题,因为在分组括号外添加了点。但是,点不会被转义,这意味着表达式会匹配一些不正确的字符串以及正确的字符串(例如123a210b132c210
)
在数字制作周围添加括号可解决此问题:
(((0|1)?\d{1,2}|2[0-4]\d|25[0-5])\.){3}((0|1)?\d{1,2}|2[0-4]\d|25[0-5])
//^ ^