正则表达式高尔夫 - 有更短的方式吗?

时间:2016-02-15 23:37:52

标签: regex

我已经制作了这个正则表达式来检查一个字符串是否是一个有效的IP,包括检查每个octel是否在0-255之间(更具体地说,它检查它是否在0-199之间 OR 200 -249 OR 250-255)

((1?\d?\d|2[0-4]\d|25[0-5])\.){3}(1?\d?\d|2[0-4]\d|25[0-5])

更简单的方法是:

(pattern\.){3}pattern

匹配pattern.pattern.pattern.pattern,使得模式是0到255之间的数字。

我想知道是否有更短的编写此正则表达式的方式,这样pattern只需编写一次,同时不会影响正则表达式的准确性,如(pattern\.?){4}

修改

看起来像这样:^pattern($|\.(?!$)){4}$正是我正在寻找的。

取自:https://stackoverflow.com/a/28446132/4526483

1 个答案:

答案 0 :(得分:0)

其实是的!从具有复杂模式的一个稍微过于灵活的正则表达式开始:

(pattern\.?){4}

然后应用断言来锁定点:

(?=(\d+\.){3}\d+([^.\d]|$))(pattern\.?){4}

完整的正则表达式将是:

(?=(\d+\.){3}\d+([^.\d]|$)(1?\d?\d|2[0-4]\d|25[0-5])\.){4}

如果一个点可以立即跟随ip,请从前面的字符类中删除点。