我正在尝试从给定文本中删除任何超链接,并覆盖任何看似超链接的片段,将其替换为文本[LINK REMOVED FROM EVIDENCE AT REQUEST OF TRIAL JUDGE]
public String overwriteLinks(String text){
final String OVERWRITE_WITH = "[LINK REMOVED FROM EVIDENCE AT REQUEST OF TRIAL JUDGE]";
List<String> checkForPatterns = Arrays.asList(
"http://", "www", ".com", ".net",
".org", "dot com", "dot net");
StringBuilder re = new StringBuilder();
for (String checkForPattern : checkForPatterns){
if (re.length() > 0)
re.append("|");
String quotedSite = Pattern.quote(checkForPattern);
re.append(quotedSite);
}
Pattern p = Pattern.compile(re.toString(),Pattern.CASE_INSENSITIVE);
text = p.matcher(text).replaceAll(OVERWRITE_WITH);
return text;
}
有没有更好的方法来最大化删除的链接数量?我的正则表达技巧充其量只是。不过。
答案 0 :(得分:1)
尝试使用此正则表达式:
public static final URI_REGEX = Pattern.compile( "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?" );
我似乎记得在几年前的URI RFC中从我们的代码库中导入/创建了那个。这应匹配字符串中的所有URI,并允许轻松替换。
答案 1 :(得分:0)
您可以按照Lars Vogel在Java Regex Tutorial(“6.4。构建链接检查器”)中给出的示例创建一个类,然后使用一种方法来增强它,以替换使用OVERWRITE_WITH字符串找到的任何链接
您必须调整Lars为您的特定需求提供的示例,但之后您将拥有一个链接处理类,您可以根据需要在应用程序的其他部分使用该类。