Extract url from text: Difference between revisions
Jump to navigation
Jump to search
m (→擷取完整網址) |
|||
| Line 19: | Line 19: | ||
說明: | 說明: | ||
# 網址可能是 <nowiki>http://</nowiki> 或 <nowiki>https://</nowiki> 開頭,所以條件是 {{kbd | key = <nowiki>http[s]?://</nowiki>}} | # 網址可能是 <nowiki>http://</nowiki> 或 <nowiki>https://</nowiki> 開頭,所以條件是 {{kbd | key = <nowiki>http[s]?://</nowiki>}} | ||
# 根據 [http://tools.ietf.org/html/rfc3986/ RFC 3986] 網址允許的文字有 {{kbd | key = <nowiki>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=</nowiki>}},其他文字則需要加上比例符號 % 編碼。 <ref>[http://stackoverflow.com/questions/1547899/which-characters-make-a-url-invalid validation - Which characters make a URL invalid? - Stack Overflow]</ref> | # 根據 [http://tools.ietf.org/html/rfc3986/ RFC 3986] 的 [http://tools.ietf.org/html/rfc3986#section-2 Section 2: Characters] 網址允許的文字有 {{kbd | key = <nowiki>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=</nowiki>}},其他文字則需要加上比例符號 % 編碼。 <ref>[http://stackoverflow.com/questions/1547899/which-characters-make-a-url-invalid validation - Which characters make a URL invalid? - Stack Overflow]</ref> | ||
== 擷取網址中的網域部分 == | == 擷取網址中的網域部分 == | ||
Revision as of 09:32, 11 October 2016
使用正規表示法 (Regular expression) ,從文章內容中擷取網址。
擷取完整網址
使用 Google 試算表 REGEXEXTRACT 函數,從文章內容擷取第一個網址。
=REGEXEXTRACT(A1, "(http[s]?://[a-zA-Z0-9\-_\\._~\:\/\?#\[\]@\!\$&'\(\)\*\+,;\=%]+)")
輸入:
Yahoo! 新聞 https://tw.news.yahoo.com/abc
輸出:
https://tw.news.yahoo.com/abc
說明:
- 網址可能是 http:// 或 https:// 開頭,所以條件是 http[s]?://
- 根據 RFC 3986 的 Section 2: Characters 網址允許的文字有 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=,其他文字則需要加上比例符號 % 編碼。 [1]
擷取網址中的網域部分
=REGEXEXTRACT(A1, "(http[s]?\://[^/]+)")
輸入:
Yahoo! 新聞 https://tw.news.yahoo.com/abc
輸出:
https://tw.news.yahoo.com/
說明:
- 網域指 http:// 或 https:// 開頭,在符號 / 前的那一段文字。因此規則改成找不是符號 / 的多個文字。[^/]+
資料驗證用
文章內容是否包含網址
使用 Google 試算表 REGEXMATCH 函數,符合正規表示法的規則的話,回傳 TRUE。若不符合,則回傳 FALSE。
=REGEXMATCH(A1, "http")
輸入1:
Yahoo! 新聞 https://tw.news.yahoo.com/abc
輸出1:
TRUE
輸入2:
Yahoo! 新聞
輸出2:
FALSE
文章內容是否包含網域
原始資料包含網域,但是網域前面不包含 http e.g. tw.news.yahoo.com 或 www.bbc.co.uk。使用 Google 試算表 REGEXMATCH 函數,符合正規表示法的規則的話,回傳 TRUE。若不符合,則回傳 FALSE。
=REGEXMATCH(A1, ("[a-zA-Z0-9]{2,}\.[a-z]{2,}$"))
輸入1:
www.bbc.co.uk
輸出1:
TRUE
輸入2:
Yahoo! 新聞
輸出2:
FALSE