java - 正则表达式有异常(exception)

标签 java regex exception

我需要正则表达式来检测所有带端口和不带端口但除外的IP

93.153.31.151(:27002)

10.0.0.1(:27002)

我有一些但我需要添加异常(exception)

\\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");                  

    }

最佳答案

没有对可以以结构化方式处理 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。将它们全部包装在一个大的正则表达式中很快就会变得非常难看。

关于java - 正则表达式有异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182556/

相关文章:

c# - 按数字和符号拆分字符串 c#

c++ - BOOST regex - 没有带有回调函数的 u32regex_replace() 原型(prototype)

javascript - 在 javascript 中创建特定输入(例如 CT10-0001)的正则表达式

c# - 首先检查数据库单元格是否为空

java - 字符串数组的索引

java - Java中二维数组中每个维度的长度

java - 读取Java中的错误响应主体

java - 当JButton增加JLabel中的值时获取值并放入数据库

ruby - 引发异常 : use instance or class?

java - 数组空指针异常?