0

URL からプライベート ネットワーク IP を除外しようとしています。
以前はこのコードを持っていました

 if(!sCurrentLine.startsWith("192.168") && !sCurrentLine.startsWith("172.") && !sCurrentLine.startsWith("10.")&& !sCurrentLine.startsWith("127.0.0"))

データ例

10.1.1.83/nagiosxi/
10.1.1.83/nagiosxi//rr.php?uid=18-c96b5fb53f9
127.0.0.1/tkb/internet/
172.18.20.200/cgi-bin/topstats.pl?submit_type=topstats&time=00:2

これが私の新しいコードです

 Pattern privateIp=Pattern.compile("(^127\\.0\\.0\\.1)|(^10\\.)|(^172\\.1[6-9]\\.)|(^172\\.2[0-9]\\.)|(^172\\.3[0-1]\\.)|(^192\\.168\\.)");
 while((sCurrentLine=br.readLine())!=null)
{

            Matcher pnm=privateIp.matcher(sCurrentLine);

            if(!pnm.matches())
            {
              System.out.println("not match");

            }
}

パターンマッチを使おうと思っています。ただし、Pattern.compileこの正規表現は使用しません。

または、プライベート ネットワーク IP を処理できる機能はありますか。

それについて何か考えはありますか?

4

3 に答える 3

2

\単なる推測ですが、パターンを表す文字列でエスケープしていない可能性はありますか?

Pattern.compile("(^127\\.0\\.0\\.1)|(^10\\.)|(^172\\.1[6-9]\\.)|(^172\\.2[0-9]\\.)|(^172\\.3[0-1]\\.)|(^192\\.168\\.)");

私にとっては問題なくコンパイルされます(まだデータでテストしていませんが)。

編集後に更新

matchesメソッドを使用して、正規表現が行頭にあるかどうかを確認していることがわかります。matches正規表現がデータ全体と一致するかどうかを確認するため、これは機能しません。このメソッドを次のように変更してみてくださいfind

if (!pnm.find()) {
    System.out.println("not match");
}
于 2013-08-23T00:39:57.690 に答える