将文本中的URL替换为href(在Java中)

将文本中的URL替换为href(在Java中),java,regex,href,Java,Regex,Href,我必须将以纯文本形式输入的url转换为html HREF,我想找到多个url 这: Hi这里有一个链接供您参考:http://www.google.com. 希望它能起作用。 将成为: Hi这里有一个给你的链接:。希望它能起作用。 找到此代码: public String transformURLIntoLinks(String text){ String urlValidationRegex = "(https?|ftp)://(www\\d?|[a-zA-Z0-9]+)?.[a-zA-Z0-

我必须将以纯文本形式输入的url转换为html HREF,我想找到多个url

这:
Hi这里有一个链接供您参考:http://www.google.com. 希望它能起作用。

将成为:
Hi这里有一个给你的链接:。希望它能起作用。

找到此代码:

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();
}
public String transformURLIntoLinks(字符串文本){
字符串urlValidationRegex=“(https?| ftp):/(www\\d?[a-zA-Z0-9]+)。[a-zA-Z0-9-]+(\\:)([a-zA-Z0-9.]+(\\d+)([/?:])”;
Pattern p=Pattern.compile(urlvalidateregex);
匹配器m=p.Matcher(文本);
StringBuffer sb=新的StringBuffer();
while(m.find()){
找到的字符串=m.group(0);
m、 (b)以“”号填列;
}
m、 (某人);
使某人返回字符串();
}
张贴在这里

而且它工作得很好。对于所有正确前缀为
http
的URL。 但我还想找到url的开头仅为
www

知道正则表达式的人能帮我吗?

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

使用此正则表达式:

\b((https?| ftp):\/\/)?[-a-zA-Z0-9:%.\+~\=]{2256}\.[a-zA-z]{2,6}\b(\/[-a-zA-Z0-9:%.\+.~\\+.&/=]*(?:\/\b)
转义Java转义字符(\):

\\b((https?| ftp):\/\\\/)?[-a-zA-Z0-9:%.\\+~\=]{2256}\.[a-zA-z]{2,6}\\b(\/[-a-zA-Z0-9:%\\\\+.~\\\\\\\\\\\\?&/=]*(?:\/\/\\\\\b)
例子 示例1(带协议,在句子中)

示例2(无协议,在句子中)

通过环绕来制作www optinnal。 你可以试试这个:

  final String urlValidationRegex = "(https?|ftp)://(www\\d?)?(|[a-zA-Z0-9]+)?.[a-zA-Z0-9-]+(\\:|.)([a-zA-Z0-9.]+|(\\d+)?)([/?:].*)?"

您可以尝试以下模式

((https?| ftp):/)?(www\d?|[a-zA-Z0-9]+)?[a-zA-Z0-9-]+(:)([a-zA-Z0-9.]+(\d+)([/?:])

更新后的代码将被删除

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();
}
public String transformURLIntoLinks(字符串文本){
字符串urlValidationRegex=“((https?| ftp):/)?(www\\d?|[a-zA-Z0-9]+)。[a-zA-Z0-9-]+(\\:|)。([a-zA-Z0-9.]+|(\\d+)([/?:].*)”;
Pattern p=Pattern.compile(urlvalidateregex);
匹配器m=p.Matcher(文本);
StringBuffer sb=新的StringBuffer();
while(m.find()){
找到的字符串=m.group(0);
m、 (b)以“”号填列;
}
m、 (某人);
使某人返回字符串();
}

尝试以
(?:(https?| ftp):\/\/)?
作为正则表达式的开头,它将与仅以
www
开头的url相匹配。当您可以做
(某事)时,为什么要使用
?是的,使用元字符总是更好。更新了帖子,谢谢。这不是OP想要的。他希望能够省略协议,而不是子域。我转换的文本不仅仅是URL。尝试实现您的代码,但它将我的文本中的所有内容都转换为hrefs,如下:
Hi这里有一个链接供您访问www.google.com小心变成:
@Anders我已经编辑了我的答案。我不知道它应该从一个句子中提取一个链接。现在应该开始工作了,像个魔咒一样工作。添加了一些代码,添加了协议,一切就绪。谢谢你的帮助!