正则表达式例外

时间:2013-01-06 13:23:18

标签: java regex exception

我需要正则表达式使用端口检测所有IP但没有端口但是除了

  

93.153.31.151(:27002)

  

10.0.0.1(:27002)

我有一些,但我需要添加例外

\\d{1,3}(?:\\.\\d{1,3}){3}(?::\\d{1,5})?

对于java匹配器

    String numIPRegex = "\\d{1,3}(?:\\.\\d{1,3}){3}(?::\\d{1,5})?";

    if (pA.matcher(msgText).find()) {
        this.logger.info("Found");

    } else {    
        this.logger.info("Not Found");                  

    }

2 个答案:

答案 0 :(得分:4)

没有对可以以结构化方式处理IP地址的更适合的Java类做出声明......

您可以使用否定预测向正则表达式添加例外:

String numIPRegex = "(?!(?:93\\.153\\.31\\.151|10\\.0\\.0\\.1)(?::27002)?)\\d{1,3}(?:\\.\\d{1,3}){3}(?::\\d{1,5})?";

说明:

(?!                                   # start negative look-ahead
  (?:                                 #   start non-capturing group
    93\.153\.31\.151                  #     exception address #1
    |                                 #     or
    10\.0\.0\.1                       #     exception address #2
  )                                   #   end non-capturing group
  (?:                                 #   start non-capturing group
    :27002                            #     port number
  )?                                  #   end non-capturing group; optional
)                                     # end negative look-ahead
\d{1,3}(?:\.\d{1,3}){3}(?::\d{1,5})?  # your original expression

当然,另一个明显的替代方案是逐个前置地测试异常,如果一个例外匹配则返回false。将它们全部包装在一个大的正则表达式中很快就会变得非常难看。

答案 1 :(得分:0)

你想要这个吗?

public static void main(String[] args) {
    System.out.println(match("93.153.31.151(:27002)")); // false
    System.out.println(match("12.23.34.45(:21002)")); // true
}
public static boolean match(String input) {
    String exclude = "|93.153.31.151(:27002)|10.0.0.1(:27002)|";
    if (exclude.contains("|" + input + "|")) return false; // Exclude from match
    //
    String numIPRegex = "^\\d{1,3}(\\.\\d{1,3}){3}\\(:\\d{1,5}\\)$";
    Pattern pA = Pattern.compile(numIPRegex);
    //
    if (pA.matcher(input).matches()) {
        System.out.println("Found");
        return true;
    } else {    
        System.out.println("Not Found");                  
    }
    return false;
}