我必须将以纯文本形式输入的网址转换为html hrefs,我想找到多个网址。
此:
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
开头的网址。
知道他的正则表达式的人能帮助我吗?
答案 0 :(得分:0)
使 (https?|ftp)://
部分可选。这是通过添加问号?
来完成的。所以它将是((https?|ftp)://)?
使用此RegEx:
\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 :(得分:0)
通过周围环境来制作www optinnal。 你的情况试试这个:
final String urlValidationRegex = "(https?|ftp)://(www\\d?)?(|[a-zA-Z0-9]+)?.[a-zA-Z0-9-]+(\\:|.)([a-zA-Z0-9.]+|(\\d+)?)([/?:].*)?"
答案 2 :(得分:0)
您可以尝试以下模式。
((HTTPS | FTP)://)?(?WWW \ d | [A-ZA-Z0-9] +)[α-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();
}