Java:用可点击的HTML链接替换文本URL

Dou*_*ugh 12 java regex url grouping replace

我正在尝试将包含某些URL的String替换为与浏览器兼容的链接URL.

我的初始String看起来像这样:

"hello, i'm some text with an url like http://www.the-url.com/ and I need to have an hypertext link !"
Run Code Online (Sandbox Code Playgroud)

我想得到的是一个字符串看起来像:

"hello, i'm some text with an url like <a href="http://www.the-url.com/">http://www.the-url.com/</a> and I need to have an hypertext link !"
Run Code Online (Sandbox Code Playgroud)

我可以使用以下代码行捕获URL:

String withUrlString = myString.replaceAll(".*://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"null\">HereWasAnURL</a>");
Run Code Online (Sandbox Code Playgroud)

也许regexp表达式需要一些修正,但它工作正常,需要在更长的时间内进行测试.

所以问题是如何保持正则表达式捕获的表达式,只需添加创建链接所需的内容:catched string

提前感谢您的关注和回复!

Mar*_*aux 7

尝试使用:

myString.replaceAll("(.*://[^<>[:space:]]+[[:alnum:]/])", "<a href=\"$1\">HereWasAnURL</a>");
Run Code Online (Sandbox Code Playgroud)

我没有检查你的正则表达式.

通过使用, ()您可以创建组.该$1指示组索引. $1将取代网址.

我问了一个simalir问题:我的问题
有些例子:在正则表达式中捕获组中的文本


Pau*_*kin 6

public static String textToHtmlConvertingURLsToLinks(String text) {
    if (text == null) {
        return text;
    }

    String escapedText = HtmlUtils.htmlEscape(text);

    return escapedText.replaceAll("(\\A|\\s)((http|https|ftp|mailto):\\S+)(\\s|\\z)",
        "$1<a href=\"$2\">$2</a>$4");
}
Run Code Online (Sandbox Code Playgroud)

可能有更好的REGEX,但只要在URL结束后有空格或URL在文本的末尾,这就可以解决问题.此特定实现还使用org.springframework.web.util.HtmlUtils来转义可能已输入的任何其他HTML.


Son*_*123 5

对于正在搜索更强大的解决方案的任何人,我可以推荐Twitter文本库.

用这个库替换URL的工作方式如下:

new Autolink().autolink(plainText) 
Run Code Online (Sandbox Code Playgroud)