java - 用 href 替换文本中的 URL(在 Java 中)

标签 java regex href

我必须将以纯文本形式输入的 url 转换为 html href,并且我想查找多个 url。

这个: Hi here is a link for you: http://www.google.com. Hope it works.

将变成: Hi here is a link for you: <a href='http://www.google.com'>http://www.google.com</a>. Hope it works.

找到这段代码:

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();
}

张贴在这里 https://stackoverflow.com/a/17704902

而且效果很好。对于所有以 http 为前缀的网址. 但我也想找到以 www 开头的网址.

任何知道他的正则表达式的人都可以帮助我吗?

最佳答案

使 (https?|ftp):// 部分可选。这是通过添加问号 ? 来完成的。所以它将是 ((https?|ftp)://)?

使用这个正则表达式:

\b((https?|ftp):\/\/)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[A-Za-z]{2,6}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)*(?:\/|\b)

转义 Java 转义字符 (\):

\\b((https?|ftp):\\/\\/)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[A-Za-z]{2,6}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)*(?:\\/|\\b)

例子

示例1(带协议(protocol),在句子中)

Example 1

例2(无协议(protocol),句中)

Example 2

关于java - 用 href 替换文本中的 URL(在 Java 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49425990/

相关文章:

Javascript 将文本转换为链接

javascript - 按类名监听 href 的点击事件

html - 使 <img> 在 <div> 标签内可点击

java - OCP 7 II 正则表达式

java - 在进入循环之前显示 GlassPane

java - 带有字符串和数组列表的 HashMap - 错误消息

javascript - 为什么/(red|green)/g.exec ('red, green, red, green' ) 返回 ["red", "red"]?

regex - 如何使用Regex跟踪这些URL?

java - 异常: Operation not allowed after ResultSet closed while fetching value from two table

c# - C# 中是否存在异步正则表达式,它们对我的情况有帮助吗?