Regex高尔夫-有更短的路吗?
我制作这个正则表达式是为了检查字符串是否是有效的IP,包括检查每个八进制是否在0-255之间(更具体地说,它检查字符串是否在0-199或200-249或250-255之间)Regex高尔夫-有更短的路吗?,regex,Regex,我制作这个正则表达式是为了检查字符串是否是有效的IP,包括检查每个八进制是否在0-255之间(更具体地说,它检查字符串是否在0-199或200-249或250-255之间) ((1?\d?\d | 2[0-4]\d | 25[0-5])\){3}(1?\d?\d | 2[0-4]\d | 25[0-5]) 更简单的方法是: (模式\){3}模式 它匹配pattern.pattern.pattern.pattern,使pattern是一个介于0和255之间的数字 我想知道是否有一种更短的方法来编写
((1?\d?\d | 2[0-4]\d | 25[0-5])\){3}(1?\d?\d | 2[0-4]\d | 25[0-5])
更简单的方法是:
(模式\){3}模式
它匹配pattern.pattern.pattern.pattern
,使pattern是一个介于0和255之间的数字
我想知道是否有一种更短的方法来编写这个正则表达式,这样模式
只需编写一次,而不会影响正则表达式的准确性,就像(pattern\.?){4}
那样
编辑
看起来是这样的:^pattern($|\。(?!$){4}$
正是我想要的
摘自:事实上是的!从一个稍微过于灵活的正则表达式开始,它有一个复杂的模式:
(pattern\.?){4}
然后应用断言锁定点:
(?=(\d+\.){3}\d+([^.\d]|$))(pattern\.?){4}
完整的正则表达式将是:
(?=(\d+\.){3}\d+([^.\d]|$)(1?\d?\d|2[0-4]\d|25[0-5])\.){4}
如果一个点可以立即跟随ip,请在“向前看”中从字符类中删除该点。您的正则表达式接受00,但不接受000。为什么?我想我没见过有人在八位字节中写一个IP地址,可能重复的IP地址验证是一个非常复杂的问题,几乎不可能在一个正则表达式中涵盖。请看这个。具体地说,听起来你在寻找这个答案:看起来这确实让它短了一点:
(?=(\\d+\){3}\\d+)((1?\d?\d | 2[0-4]\d | 25[0-5])。{4}
@knowbody如果你对下面的内容不挑剔,你甚至可以完全删除最后的部分([^.\d]-$)