Android - 如何使用正则表达式以纯文本格式检测网址?

时间:2016-12-15 07:39:16

标签: java android regex

我正在尝试解析纯文本中的链接,但我遇到了这个非常有用的网站:

http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without

有一个使用该正则表达式匹配网址的例子,但是我在语法上绕过它有些麻烦。

Java中的等价物是什么:

$(function() {
  var urlRegEx = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-]*)?\??(?:[\-\+=&;%@\.\w]*)#?(?:[\.\!\/\\\w]*))?)/g;
  $('#target').html($('#source').html().replace(urlRegEx, "<a href='$1'>$1</a>"));
});

任何帮助或解决方案都是最有效的。

我知道Java中的PatternMatcher类,但我不知道jquery的.html()为了实现解决方案做了什么。提前谢谢。

2 个答案:

答案 0 :(得分:2)

如果您需要替换匹配的字符串,则无需直接使用PatternMatcher,使用String#replaceAll

String input_str = "http://www.some.site.com?and=value&s=more\nhttp://10.23.46.134\nemail@me.at.site.com";
String regex = "(([A-Za-z]{3,9}:(?://)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www\\.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:/[+~%/.\\w-]*)?\\??(?:[-+=&;%@.\\w]*)#?(?:[.!/\\\\\\w]*))?";
String res = input_str.replaceAll(regex, "<a href='$0'>$0</a>");
System.out.println(res);
// => 
//  <a href='http://www.some.site.com?and=value&s=more'>http://www.some.site.com?and=value&s=more</a>
//  <a href='http://10.23.46.134'>http://10.23.46.134</a>
//  <a href='email@me.at.site.com'>email@me.at.site.com</a>

正则表达式是相同的,只需删除带有/修饰符的初始值和最后g,然后加倍其他反斜杠([...]内的反斜杠都可以删除\w除外$0 1}})。可以删除外部捕获组,因为您可以使用{{1}}反向引用来访问替换模式中的整个匹配值。

请参阅regex demoJava demo

答案 1 :(得分:0)

您可以执行以下操作(根据您的需要调整正则表达式):

String originalString = "Please go to http://www.stackoverflow.com";
String newString = originalString.replaceAll("http://.+?(com|net|org)/{0,1}", "<a href=\"$0\">$0</a>");