处理的字符串,并将通过Java工作联系更换人网址(Processing a String and r

2019-10-30 07:32发布

我将如何改变文本类似下面或包含其他任何文本的URL(HTTP FTP等)

去这个链接http://www.google.com (OFC堆栈溢出已经这样做了,在我的网站,这只是纯文本);

这个

去这个链接<a href="http://www.google.com">www.google.com</a>

我想出了这个方法

public String transformURLIntoLinks(String text){
    String urlValidationRegex = "(https?|ftp)://(www\\d?|[a-zA-Z0-9]+)?.[a-zA-Z0-9-]+(\\:|.)([a-zA-Z0-9.]+|(\\d+)?)([/?:].*)?";
    Pattern p = Pattern.compile(urlValidationRegex);
    Matcher m = p.matcher(text);
    StringBuffer sb = new StringBuffer();
    while(m.find()){
        String found =m.group(1); //this String is only made of the http or ftp (just the first part of the link)
        m.appendReplacement(sb, "<a href='"+found+"'>"+found+"</a>"); // the result would be <a href="http">"http"</a>
    }
    m.appendTail(sb);
    return sb.toString();
}

问题是我已经试过比赛只有第一部分(“http”或“FTP”)的正则表达式。

我的输出变为: Go to this link <a href='http'>http</a>

它应该是这个

Go to this link <a href='http://www.google.com'>http://www.google.com</a>

Answer 1:

public String transformURLIntoLinks(String text){
String urlValidationRegex = "(https?|ftp)://(www\\d?|[a-zA-Z0-9]+)?.[a-zA-Z0-9-]+(\\:|.)([a-zA-Z0-9.]+|(\\d+)?)([/?:].*)?";
Pattern p = Pattern.compile(urlValidationRegex);
Matcher m = p.matcher(text);
StringBuffer sb = new StringBuffer();
while(m.find()){
    String found =m.group(0); 
    m.appendReplacement(sb, "<a href='"+found+"'>"+found+"</a>"); 
}
m.appendTail(sb);
return sb.toString();
   }

m.group(1)是错误。 m.group(0)的作品。 这将改变在文字中找到的任何网址为锚。



文章来源: Processing a String and replacing al URL's with working links via Java