1

ポート付きとポートなしのすべての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");                  

    }
4

2 に答える 2

4

構造化された方法で IP アドレスを処理できる、より適した Java クラスについて何も言わずに...

否定先読みを使用して、正規表現に例外を追加できます。

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

説明:

(?! # 否定先読みを開始
  (?: # 非キャプチャ グループを開始
    93\.153\.31\.151 # 例外アドレス #1
    | | # また
    10\.0\.0\.1 # 例外アドレス #2
  ) # 非キャプチャ グループの終了
  (?: # 非キャプチャ グループを開始
    :27002 # ポート番号
  )? # 非キャプチャ グループを終了します。オプション
) # 否定先読みを終了
\d{1,3}(?:\.\d{1,3}){3}(?::\d{1,5})? # あなたのオリジナル表現

もちろん、他の明白な代替手段は、例外を 1 つずつ前もってテストし、1 つの例外が一致した場合に false を返すことです。それらをすべて 1 つの大きな正規表現にまとめると、すぐに非常に見苦しくなります。

于 2013-01-06T13:37:27.697 に答える
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;
}
于 2013-01-06T13:56:52.787 に答える