如何在某些文字中找到链接?

时间:2014-07-05 07:09:36

标签: java regex rfc

我在java 中有字符串,可能包含或不包含某些链接(网址如www.google.com,stackoverflow.com,stanford.edu等) 。现在我想在字符串中搜索它是否包含任何链接。我有两个问题:

  1. 搜索链接时要搜索的内容。我的意思是链接可能或可能不包含www,https,com等,所以如何区分它与文本。链接的RFC规范是什么?

  2. 在Java中使用哪个函数来搜索正则表达式?我对Java很新。

2 个答案:

答案 0 :(得分:2)

这会对你有帮助。

  • 通过空格分隔整个字符串。
  • 尝试使用每个项目形成网址。

    import java.net.URL;
    import java.net.MalformedURLException;
    
    // Replaces URLs with html hrefs codes
       public class URLInString {
         public static void main(String[] args) {
         String s = args[0];
         // separete input by spaces ( URLs don't have spaces )
         String [] parts = s.split("\\s");
         // Attempt to convert each item into an URL.   
         for( String item : parts ){ 
            try {
               URL url = new URL(item);
               // If possible then replace with anchor...
               System.out.print("<a href=\"" + url + "\">"+ url + "</a> " );    
               }catch (MalformedURLException e) {
                   // If there was an URL that was not it!...
                   System.out.print( item + " " );
               }
          }            
      }
    

答案 1 :(得分:0)

这不依赖于例外来查找URL有效性,只需通过正则表达式查找URL:

/**
 * Fills the arraylist urls with all valid (and a few invalid) urls in 's'
 */
void findUrlsInString(String s, ArrayList<String> urls) {
    Pattern p = Pattern.compile(
        "(([a-z]+):((//)|(\\\\))+)?[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*");
    Matcher m = p.matcher(s);
    while (m.find()) {
        urls.add(m.group());
    }
}

正则表达式并不完美;我已经调整了它from here,但我找不到一个规范的Java正则表达式的URL。您可以制作将通过此正则表达式的无效网址,但这需要轻微的努力。