具有排除性的IP子网的正则表达式

时间:2017-02-14 16:51:32

标签: regex

我正在尝试为TACACS设置XML配置文件。我不是REGEX的最佳人选。

基本上,您可以指定一组客户端。如果要将整个子网包括在内,它们可以轻松实现:

int power(int x, unsigned int y)
  {
     int temp;
     if( y ==1)
        return x;

     if (y%2 == 0){
      temp = power(x, y/2);
       return temp*temp;
     }
     else{
       temp = power(x, (y-1)/2);
       return x*temp*temp;
     }
  }

我遇到的问题是我想为不同的客户端(防火墙)做不同的事情。例如,我想说明子网192.168.100中的所有客户端。*除了192.168.100.127之外。

我立即注意到了一些问题。

192.168.100。[1-9] [0-9]应涵盖192.168.100.10-99,但也会在最后一个八位字节中抓取三位数的IP。和192.168.100.101一样,因为它与101中的10匹配.192.168.100也是同样的问题。[1-9]因为它抓住了第一个数字。

如何强制它只抓一个或两个数字?

至于我尝试的排除:192.168.100.1 [0-9] [^ 7]它设法不抓住192.168.100.127但是当它应该只检查100-199时也抓住了192.168.100.11。

任何帮助将不胜感激。感谢。

3 个答案:

答案 0 :(得分:1)

使用正则表达式进行ip:

^(([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))\.){3}([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))$

并在ip的最后一部分之前添加否定前瞻:

^(([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))\.){3}(?!127)([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))$
//                                      here __^^^^^^^

具体地址:

^192.168.100.(?!127)([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))$

192.168.100.0

外,这将接受192.168.100.255192.168.100.127的所有范围

答案 1 :(得分:0)

this会为你效力吗? ((?:2[0-5][0-5]|1\d\d|\d{1,2})\.(?:2[0-5][0-5]|1\d\d|\d{1,2})\.(?:2[0-5][0-5]|1\d\d|\d{1,2})\.(?:2[0-5][0-5]|1[^2][^7]|\d{1,2}))$

答案 2 :(得分:0)

在IP的末尾添加单词边界\b,例如:

192.168.100.[1-9][0-9]\b

字边界不消耗任何输入,断言不是另一个数字。

对于"而不是127"例如,使用此:

192.168.100.1[0-9][^7<]

因为[^7]也会匹配以下左括号。