package cgeo.geocaching.connector.gc; import java.util.regex.Pattern; /** * These patterns have been optimized for speed. Improve them only if you can prove * that *YOUR* pattern is faster. Use RegExRealPerformanceTest to show. * * For further information about patterns have a look at * http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html * * @author blafoo */ public final class GCConstants { /** Live Map */ public final static String URL_LIVE_MAP = "http://www.geocaching.com/map/default.aspx"; /** Caches in a tile */ public final static String URL_MAP_INFO = "http://www.geocaching.com/map/map.info"; /** Tile itself */ public final static String URL_MAP_TILE = "http://www.geocaching.com/map/map.tile"; /** * Patterns for parsing the result of a (detailed) search */ public final static Pattern PATTERN_HINT = Pattern.compile("
]*>(.*?)
"); public final static Pattern PATTERN_DESC = Pattern.compile("(.*?)[^<]*[^<]*

[^<]*

[^<]*

[^<]*\\W*Additional Hints"); public final static Pattern PATTERN_SHORTDESC = Pattern.compile("(.*?)[^\\w^<]*"); public final static Pattern PATTERN_GEOCODE = Pattern.compile("[^<]*]*>[^S]*Size[^:]*:[^<]*]*>[^<]*\"\\w+:]*>[^<]*[^<]*[^<]*[^<]*

"); public final static Pattern PATTERN_LATLON = Pattern.compile("]*>(.*?)"); public final static Pattern PATTERN_LATLON_ORIG = Pattern.compile("\\{\"isUserDefined\":true[^}]+?\"oldLatLngDisplay\":\"([^\"]+)\"\\}"); public final static Pattern PATTERN_LOCATION = Pattern.compile(Pattern.quote("In ") + "(?:]*>)?(.*?)<"); public final static Pattern PATTERN_PERSONALNOTE = Pattern.compile("

]*>(.*?)

"); public final static Pattern PATTERN_NAME = Pattern.compile("(.*?)"); public final static Pattern PATTERN_DIFFICULTY = Pattern.compile("]*>[^<]*]*>[^<]*]*>[^<]*
[^<]*

"); public final static Pattern PATTERN_FOUND_ALTERNATIVE = Pattern.compile("
[^<]+([^<]+)"); public final static Pattern PATTERN_TYPE = Pattern.compile("\"([^\"]+?)\"\\W*Hidden[\\s:]*([^<]+?)"); public final static Pattern PATTERN_HIDDENEVENT = Pattern.compile("Event\\s*Date\\s*:\\s*([^<]+)", Pattern.DOTALL); public final static Pattern PATTERN_FAVORITE = Pattern.compile("\"Remove"); public final static Pattern PATTERN_FAVORITECOUNT = Pattern.compile("]+>[^<]*\\D*([0-9]+?)"); public final static Pattern PATTERN_COUNTLOGS = Pattern.compile(""); public final static Pattern PATTERN_LOGBOOK = Pattern.compile("initalLogs = (\\{.+\\});"); /** Two groups ! */ public final static Pattern PATTERN_COUNTLOG = Pattern.compile("]+> (\\d*[,.]?\\d+)"); public static final Pattern PATTERN_PREMIUMMEMBERS = Pattern.compile("

This is a Premium Member Only cache.

"); public final static Pattern PATTERN_ATTRIBUTES = Pattern.compile("

[^<]*]+>\\W*Attributes[^<]*

[^<]*
((?:[^<]*\"[^\"]+\"[^]*>)+?)[^<]*\\s+((?:]+>]+>[^<]+
(?:[^<]+

)?)+)\\s+

"); public final static Pattern PATTERN_SPOILERSINSIDE = Pattern.compile("]+>]+>([^<]+)
(?:([^<]+)

)?"); public final static Pattern PATTERN_INVENTORY = Pattern.compile("\\W*Inventory[^<]*[^<]*[^<]*
([^<]*
    (([^<]*
  • [^<]*]*>[^<]*]*>[^<]*[^<]+<\\/span>[^<]*<\\/a>[^<]*<\\/li>)+)[^<]*<\\/ul>)?"); public final static Pattern PATTERN_INVENTORYINSIDE = Pattern.compile("[^<]*
  • [^<]*]*>[^<]*]*>[^<]*([^<]+)<\\/span>[^<]*<\\/a>[^<]*<\\/li>"); public final static Pattern PATTERN_WATCHLIST = Pattern.compile("icon_stop_watchlist.gif"); // Info box top-right public static final Pattern PATTERN_LOGIN_NAME = Pattern.compile("\"SignedInProfileLink\">([^<]+)"); public static final Pattern PATTERN_MEMBER_STATUS = Pattern.compile("([^<]+)"); /** Use replaceAll("[,.]","") on the resulting string before converting to an int */ public static final Pattern PATTERN_CACHES_FOUND = Pattern.compile("title=\"Caches Found\"[\\s\\w=\"/.]*/>\\s*([\\d,.]+)"); public static final Pattern PATTERN_AVATAR_IMAGE_PROFILE_PAGE = Pattern.compile("]*\\salt=\"Avatar\""); public static final Pattern PATTERN_LOGIN_NAME_LOGIN_PAGE = Pattern.compile("You are logged in as[^<]*]*>([^<]+)[^<]*"); public static final Pattern PATTERN_CUSTOMDATE = Pattern.compile("
  • ([^<]+)[^<]*]+>[^<]*\"([^\"]+)\"]*>[^<]*"); public final static Pattern PATTERN_SEARCH_GUIDANDDISABLED = Pattern.compile("]*>[^<]*[^<]*([^<]*)?([^<]*)([^<]*)?[^<]+
    ([^<]*)]+>([^<]*)([^<]*]+>)?[^<]*
    [^<]*"); /** Two groups **/ public final static Pattern PATTERN_SEARCH_TRACKABLES = Pattern.compile("]*>(.*)"); /** Second group used */ public final static Pattern PATTERN_SEARCH_TRACKABLESINSIDE = Pattern.compile("(\"([^\"]+)\"[^<]*)"); public final static Pattern PATTERN_SEARCH_DIRECTION = Pattern.compile("]*>"); public final static Pattern PATTERN_SEARCH_GEOCODE = Pattern.compile("\\|\\W*(GC[0-9A-Z]+)[^\\|]*\\|"); public final static Pattern PATTERN_SEARCH_ID = Pattern.compile("name=\"CID\"[^v]*value=\"([0-9]+)\""); public final static Pattern PATTERN_SEARCH_FAVORITE = Pattern.compile("([0-9]+)"); public final static Pattern PATTERN_SEARCH_TOTALCOUNT = Pattern.compile("Total Records[^<]*(\\d+)<\\/b>"); public final static Pattern PATTERN_SEARCH_RECAPTCHA = Pattern.compile("]*src=\"[^\"]*/recaptcha/api/challenge\\?k=([^\"]+)\"[^>]*>"); public final static Pattern PATTERN_SEARCH_RECAPTCHACHALLENGE = Pattern.compile("challenge : '([^']+)'"); /** * Patterns for waypoints */ public final static Pattern PATTERN_WPTYPE = Pattern.compile("\\/wpttypes\\/sm\\/(.+)\\.jpg"); public final static Pattern PATTERN_WPPREFIXORLOOKUPORLATLON = Pattern.compile(">([^<]*<[^>]+>)?([^<]+)(<[^>]+>[^<]*)?<\\/td>"); public final static Pattern PATTERN_WPNAME = Pattern.compile(">[^<]*]+>([^<]*)<\\/a>"); public final static Pattern PATTERN_WPNOTE = Pattern.compile("colspan=\"6\">(.*)<\\/td>"); /** * Patterns for different purposes */ /** replace linebreak and paragraph tags */ public final static Pattern PATTERN_LINEBREAK = Pattern.compile("<(br|p)[^>]*>"); public final static Pattern PATTERN_TYPEBOX = Pattern.compile("", Pattern.CASE_INSENSITIVE); public final static Pattern PATTERN_TYPE2 = Pattern.compile("[^<]+", Pattern.CASE_INSENSITIVE); // FIXME: pattern is over specified public final static Pattern PATTERN_TRACKABLE = Pattern.compile("]*>" + "[^<]*[^<]*([A-Z0-9]+)[^<]*[^<]*([^<]+)[^<]*" + "[^<]*[^<]*[^<]*", Pattern.CASE_INSENSITIVE); public final static Pattern PATTERN_MAINTENANCE = Pattern.compile("]*>([^<]*]*>)?([^<]+)([^<]*)?", Pattern.CASE_INSENSITIVE); public final static Pattern PATTERN_OK1 = Pattern.compile("]*>[^<]*]*>[^<]*[^<]*", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); public final static Pattern PATTERN_OK2 = Pattern.compile("
    ", Pattern.CASE_INSENSITIVE); public final static Pattern PATTERN_VIEWSTATEFIELDCOUNT = Pattern.compile("id=\"__VIEWSTATEFIELDCOUNT\"[^(value)]+value=\"(\\d+)\"[^>]+>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); public final static Pattern PATTERN_VIEWSTATES = Pattern.compile("id=\"__VIEWSTATE(\\d*)\"[^(value)]+value=\"([^\"]+)\"[^>]+>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); public final static Pattern PATTERN_USERTOKEN2 = Pattern.compile("userToken\\s*=\\s*'([^']+)'"); /** * Patterns for GC and TB codes */ public final static Pattern PATTERN_GC_CODE = Pattern.compile("GC[0-9A-Z]+", Pattern.CASE_INSENSITIVE); public final static Pattern PATTERN_TB_CODE = Pattern.compile("TB[0-9A-Z]+", Pattern.CASE_INSENSITIVE); /** Live Map since 14.02.2012 */ public final static Pattern PATTERN_USERSESSION = Pattern.compile("UserSession\\('([^']+)'"); public final static Pattern PATTERN_SESSIONTOKEN = Pattern.compile("sessionToken:'([^']+)'"); /** Number of logs to retrieve from GC.com */ public final static int NUMBER_OF_LOGS = 35; private GCConstants() { // this class shall not have instances } }