2

デバッグコンソールで特定のコマンドに一致するように正規表現パターンをコンパイルしています。そのうちの1つは次のとおりです。

Pattern.compile("^\\s*\\\\connect\\s+((\\d{1,3}\\.){3}\\d{1,3})(?:\\s+(\\d+))?\\s*$");

入ることができるので

\connect 127.0.0.1 2345

または出港

\connect 127.0.0.1

フィールドを区切るために少なくとも 1 つのスペースを使用する限り、スペースは無視されます。

それは完全に機能しますが、IPがグループ1に移動する間(これは問題ありません)、ポートはグループ3に移動します(書かれているように、私は知っています)。

そこで、IP アドレスの最初の 3 つの部分に非キャプチャ グループを使用したいと考えました。

Pattern.compile("^\\s*\\\\connect\\s+((?:\\d{1,3}\\.){3}\\d{1,3})(?:\\s+(\\d+))?\\s*$");

したがって、グループ 1 で IP を取得し、グループ 2 でポートを取得すると考えました。

4

2 に答える 2

0
"^\\s*\\\\connect\\s+((?:\\d{1,3}\\.){3}\\d{1,3})(?:\\s+(\\d+))?\\s*$"

Eclipse IDE Search/Replace で試してみたところ、文字列が見つかり、IP とポートに\connect 3.54.1.4 4234適切に置き換えられました。\1\2

これも true を返します。

"\\connect 3.54.1.4 4234".matches("^\\s*\\\\connect\\s+((?:\\d{1,3}\\.){3}\\d{1,3})(?:\\s+(\\d+))?\\s*$");
于 2012-08-10T11:22:32.000 に答える
0

勝手な推測: 問題は別の場所にあります。簡単なテストを行いました:

        String test = "\\connect 127.0.0.1 2345";
    Pattern p1 = Pattern.compile("^\\s*\\\\connect\\s+((\\d{1,3}\\.){3}\\d{1,3})(?:\\s+(\\d+))?\\s*$");
    Pattern p2 = Pattern.compile("^\\s*\\\\connect\\s+((?:\\d{1,3}\\.){3}\\d{1,3})(?:\\s+(\\d+))?\\s*$");

    System.out.println(p1.matcher(test).matches());
    System.out.println(p2.matcher(test).matches());

出力: true true

于 2012-08-10T11:30:45.663 に答える