package net.dev123.mblog; import java.util.regex.Pattern; import net.dev123.commons.ServiceProvider; public class FeaturePatternUtils { //Tencent 个性域名以字母开头,6~20位字母、数字、下划线或减号 private static final Pattern MENTION_TENCENT = Pattern.compile("@[a-zA-Z][a-zA-Z0-9_-]{1,19}"); //Twitter 个性域名只能使用字母、数字或者下划线, 不能超过15个字符 private static final Pattern MENTION_TWITTER = Pattern.compile("@\\w{1,15}"); //Sina 昵称只能使用中文、字母、数字、下划线或减号,4~20个字符 private static final Pattern MENTION_SINA = Pattern.compile("@[\\w\\p{InCJKUnifiedIdeographs}-]{1,20}"); //Sohu 昵称只能使用中文,字母或数字,2~12个字符 private static final Pattern MENTION_SOHU = Pattern.compile("@[\\p{Alnum}\\p{InCJKUnifiedIdeographs}]{1,12}"); //NetEase 昵称只能使用中文,字母或数字,不能超过12个汉字 private static final Pattern MENTION_NETEASE = Pattern.compile("@[\\p{Alnum}\\p{InCJKUnifiedIdeographs}]{1,24}"); //Fanfou 昵称只能由汉字、英文字符、数字、下划线或小数点组成,最少 2 个汉字或 4 个字符,最多 6 个汉字或 12 个字符 private static final Pattern MENTION_FANFOU = Pattern.compile("@[\\p{Alnum}\\p{InCJKUnifiedIdeographs}-.]{1,12}"); private static final Pattern TOPIC_SINA = Pattern.compile("#[\\p{Print}\\p{InCJKUnifiedIdeographs}&&[^#]]+#"); private static final Pattern TOPIC_NETEASE = Pattern.compile("#[\\p{InCJKUnifiedIdeographs}\\p{Graph}&&[^#]]+[ #]{0,1}"); private static final Pattern TOPIC_TWITTER = Pattern.compile("#[\\w\\p{InCJKUnifiedIdeographs}]+"); private static final String RETWEET_SEPARATOR_SINA = "//"; private static final String RETWEET_SEPARATOR_TWITTER = "RT"; private static final String RETWEET_SEPARATOR_TENCENT = "||"; private static final String RETWEET_SEPARATOR_FANFOU = "转"; private static final String RETWEET_FORMAT_SINA = " %1$s%2$s: %3$s"; private static final String RETWEET_FORMAT_TENCENT = " %1$s %2$s: %3$s"; private static final String RETWEET_FORMAT_FANFOU = " %1$s%2$s %3$s"; //private static final Pattern URL_SINA = Pattern.compile("http://[t[sinaurl]]\\.cn/[a-zA-Z0-9]+"); //private static final Pattern URL_TENCENT = Pattern.compile("http://url\\.cn/[a-zA-Z0-9]+"); //private static final Pattern URL_NETEASE = Pattern.compile("http://163\\.fm/[a-zA-Z0-9]+"); //private static final Pattern URL_SOHU = Pattern.compile("http://t\\.itc\\.cn/[a-zA-Z0-9]+"); private static final Pattern URL_TWITTER = Pattern.compile("http://[a-zA-Z0-9+&@#/%?=~_\\-|!:,\\.;]*[a-zA-Z0-9+&@#/%=~_|]"); /** * 获取提到某人的匹配模式 * * @param serviceProvider * ServiceProvider * @return 提到某人的匹配模式 */ public static Pattern getMentionPattern(ServiceProvider serviceProvider) { if (serviceProvider == null) { return null; } Pattern pattern = null; switch (serviceProvider) { case Sina: pattern = MENTION_SINA; break; case Tencent: pattern = MENTION_TENCENT; break; case Twitter: pattern = MENTION_TWITTER; break; case Sohu: pattern = MENTION_SOHU; break; case NetEase: pattern = MENTION_NETEASE; break; case Fanfou: pattern = MENTION_FANFOU; break; default: pattern = MENTION_SINA; break; } return pattern; } /** * 获取话题的匹配模式 * * @param serviceProvider * ServiceProvider * @return 话题的匹配模式 */ public static Pattern getTopicPattern(ServiceProvider serviceProvider) { if (serviceProvider == null) { return null; } Pattern pattern = null; switch (serviceProvider) { case NetEase: pattern = TOPIC_NETEASE; break; case Twitter: pattern = TOPIC_TWITTER; break; default: pattern = TOPIC_SINA; break; } return pattern; } /** * 获取链接匹配模式 * * @param serviceProvider * @return 链接的匹配模式 */ public static Pattern getUrlPattern(ServiceProvider serviceProvider) { if (serviceProvider == null) { return null; } Pattern pattern = null; switch (serviceProvider) { case Sina: case Tencent: case NetEase: case Sohu: case Twitter: case Fanfou: default: pattern = URL_TWITTER; break; } return pattern; } /** * 获取转发时的分隔符号 * * @param serviceProvider * ServiceProvider * @return 转发时的分隔符号,默认为"||" */ public static String getRetweetSeparator(ServiceProvider serviceProvider) { if (serviceProvider == null) { return null; } String seprator = null; switch (serviceProvider) { case Tencent: case NetEase: seprator = RETWEET_SEPARATOR_TENCENT; break; case Twitter: seprator = RETWEET_SEPARATOR_TWITTER; break; case Fanfou: seprator = RETWEET_SEPARATOR_FANFOU; break; default: seprator = RETWEET_SEPARATOR_SINA; } return seprator; } public static String getRetweetFormat(ServiceProvider serviceProvider) { if (serviceProvider == null) { return null; } String seprator = null; switch (serviceProvider) { case Twitter: case Tencent: case NetEase: seprator = RETWEET_FORMAT_TENCENT; break; case Fanfou: seprator = RETWEET_FORMAT_FANFOU; break; default: seprator = RETWEET_FORMAT_SINA; } return seprator; } }