LinkedIn的Java開源URL檢測器專案

banq發表於2016-07-06
這是LinkedIn的開源URL-Detector網址解析工具。對於Url網址:http://user@example.com:39000/hello?boo=fffrag,使用該開源URL檢測器可以解析得到如下部分:

Scheme – "http"
使用者名稱 – "user"
密碼 – null
主機 – "[author]example[/author].com"
埠 – 39000
路徑 – "/hello"
查詢 – "?boo=ff"
片段 – "frag"

<p class="indent">


該庫解析URL的功能非常強大,強於如下簡單的正規表示式:

(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?
或
((ftp|http|https):\/\/)?(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?
或
((((f|ht)tps?:)?//)?([a-zA-Z0-9!#$%&'*+-/=?^_`{|}~]+(:[^ @:]+)?@)?((([a-zA-Z0-9\\-]{1,255}|xn--[a-zA-Z0-9\\-]+)\\.)+(xn--[a-zA-Z0-9\\-]+|[a-zA-Z]{2,6}|\\d{1,3})|localhost|(%[0-9a-fA-F]{2})+|[0-9]+)(:[0-9]{1,5})?([/\\?][^ \\s/]*)*)
<p class="indent">

從最後一個正規表示式看到,正則越強大,越複雜,越難以維護,如同天書。

使用URL-Detector的效能要比正規表示式提高很多很多。
URL-Detector能夠支援Html5 scheme以及Email和IPv4和Ipv6地址的RFC校驗與解析。

使用很簡單:

 import com.linkedin.urls.detection.UrlDetector;
   import com.linkedin.urls.detection.UrlDetectorOptions;
   ...
   UrlDetector parser = new UrlDetector("hello this is a url Linkedin.com", UrlDetectorOptions.Default);
    List<Url> found = parser.detect();

    for(Url url : found) {
        System.out.println("Scheme: " + url.getScheme());
        System.out.println("Host: " + url.getHost());
        System.out.println("Path: " + url.getPath());
    }
<p class="indent">


Github專案

Open Sourcing URL-Detector: A Java Library to Dete

相關文章