正则表达式捕获除特定IP地址之外的任何内容

时间:2015-02-12 04:42:07

标签: regex ip-address

我试图想出一个正则表达式(用于Java),它捕获除了IP地址列表(目前为17个)之外的所有行。这样做是为了验证网络设备上的配置是否允许除允许列表之外的任何IP地址。

配置的相关文本应如下所示:

allowed-addresses { 1.1.1.1/32 2.2.2.2/28 3.3.3.3/27 }

如果配置如下,我想捕获额外的地址:

allowed-addresses { 1.1.1.1/32 2.2.2.2/28 3.3.3.3/27 4.4.4.4/12 ALL }

所需的表达式应该从上面的行中捕获“4.4.4.4/32 ALL”。

1 个答案:

答案 0 :(得分:0)

在我看来,解析配置文件并将每个列入白名单的IP地址与结果列表进行比较将是解决问题的更简单,更省时的方法。

但是,以下正则表达式应该采用所有未经批准的IP并将它们放入列表中。添加其余允许的IP时要非常小心,因为如果不小心插入空格,那么正则表达式不会正常工作。此外,如果配置文件与您的示例完全不同,则正则表达式将不匹配。 (另一种采用解析方法)。

import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.ArrayList;

public class IpReg{

    public static void main(String []args){
        ArrayList<String> searchedIps = new ArrayList<String>();
        String config = "allowed-addresses { 1.1.1.1/32 2.2.2.2/28 3.3.3.3/27 4.4.4.4/12 ALL }";

        //To add all 17 ip address you would need to manually add them to the regex below
       Pattern whiteList =  Pattern.compile("[^ ]+ (?<!allowed-addresses |\\{ |\\} | 1\\.1\\.1\\.1/32 |2\\.2\\.2\\.2/28 |3\\.3\\.3\\.3/27 )");


        Matcher w = whiteList.matcher(config);

        while(w.find()){

             System.out.println(w.group(0));
             //use this list to check for ips that arent allowed
             searchedIps.add(w.group(0));

        }
     }
}