Android利用正則表達式如何匹配URL


在Android項目中遇到一個問題,需求是需要獲取瀏覽器分享出來的內容中的URL

正常情況下分享出來的URL信息是包含在Bundleintent.EXTRA_TEXT字段中的,而Tittle信息一般放在intent.EXTRA_SUBJECT字段中的,但是有的瀏覽器沒有提供intent.EXTRA_SUBJECT字段,而是直接將URLTittle信息直接放在intent.EXTRA_TEXT字段中,所以我們得解析intent.EXTRA_TEXT字段,通過正則表達式獲取URL,查找相關資料后發現一個比較好用的正則表達式:

((http|ftp|https)://)(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\\&%_\\./-~-]*)?

直接給出匹配的代碼方法吧

/**
 * //獲取完整的域名
 *
 * @param text 獲取瀏覽器分享出來的text文本
 */
public static String getCompleteUrl(String text) {
    Pattern p = Pattern.compile("((http|ftp|https)://)(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\\&%_\\./-~-]*)?", Pattern.CASE_INSENSITIVE);
    Matcher matcher = p.matcher(text);
    matcher.find();
    return matcher.group();
}

順便給出Android這邊獲取瀏覽器分享網頁的網頁TittleURL 方法吧

/**
 * 返回獲取的url和tittle信息
 *
 * @param intent
 * @return
 */
public static Map<String, String> getContent(Intent intent) {
    String urlStr = "";
    String titleStr = "";

    Map<String, String> shareContent = new HashMap<>();
    String text = intent.getExtras().getString(intent.EXTRA_TEXT);
    String subject = intent.getExtras().getString(intent.EXTRA_SUBJECT);
    
    if (text != null && subject != null) {
        urlStr = getCompleteUrl(text);
        titleStr = subject;
    } else if (text != null && subject == null) {
        urlStr = getCompleteUrl(text);
        titleStr = text.replace(urlStr, "");
    } else if (text == null && subject == null) {
        return null;
    }
    shareContent.put("tittle", titleStr);
    shareContent.put("url", urlStr);
    return shareContent;
}

最后的最后

第一次用簡書寫博客,感覺棒棒噠 .......

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容