文字列がURLエンコーディングされているかの判定

URLの一部(ホスト部)が「URL エンコーディングされているか否かを予め判定したい」という要求が生じたため,下記のように正規表現を用いて判定を行った.ルールは「URLエンコードされた結果は "%xy" が繰り返される.ここで x,y は16進数」とした(ただし,このルールが正しいのか,よく知らない).

プログラム例を以下に示す.
ちなみに変数 str の値は既存の URL からコピペしたものであり,私の趣味でない(^^).

import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class tmp2 {
  public static void main(String[] args){
    String str = "%E7%86%9F%E5%A5%B3%E7%94%BB%E5%83%8F%E5%8B%95%E7%94%BB.com";
    String regex = "%[0-9A-Z][0-9A-Z]%[0-9A-Z][0-9A-Z]";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(str);

    if(m.find())
      System.out.println("正規表現とマッチ");
    else
      System.out.println("正規表現とマッチしない");
  }
}