有没有比这更好的方法来清理文本输入中的超链接?

时间:2012-01-19 15:54:14

标签: java regex string-parsing

我正在尝试从给定文本中删除任何超链接,并覆盖任何看似超链接的片段,将其替换为文本[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;
}

有没有更好的方法来最大化删除的链接数量?我的正则表达技巧充其量只是。不过。

2 个答案:

答案 0 :(得分:1)

尝试使用此正则表达式:

public static final URI_REGEX = Pattern.compile( "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?" );

我似乎记得在几年前的URI RFC中从我们的代码库中导入/创建了那个。这应匹配字符串中的所有URI,并允许轻松替换。

答案 1 :(得分:0)

您可以按照Lars Vogel在Java Regex Tutorial(“6.4。构建链接检查器”)中给出的示例创建一个类,然后使用一种方法来增强它,以替换使用OVERWRITE_WITH字符串找到的任何链接

您必须调整Lars为您的特定需求提供的示例,但之后您将拥有一个链接处理类,您可以根据需要在应用程序的其他部分使用该类。