Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex高尔夫-有更短的路吗?_Regex - Fatal编程技术网

Regex高尔夫-有更短的路吗?

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之间的数字 我想知道是否有一种更短的方法来编写

我制作这个正则表达式是为了检查字符串是否是有效的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之间的数字

我想知道是否有一种更短的方法来编写这个正则表达式,这样
模式
只需编写一次,而不会影响正则表达式的准确性,就像
(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]-$)