Extract url from text: Difference between revisions

From LemonWiki共筆
Jump to navigation Jump to search
mNo edit summary
Line 69: Line 69:


=== 文章內容是否包含網域 ===
=== 文章內容是否包含網域 ===
原始資料包含網域,但是網域前面不包含 http e.g. tw.news.yahoo.com 或 www.bbc.co.uk。使用 Google 試算表 [https://support.google.com/docs/answer/3098292?hl=zh-Hant REGEXMATCH] 函數,符合正規表示法的規則的話,回傳 TRUE。若不符合,則回傳 FALSE。 {{exclaim}} 以下語法未處理 IP 形式的網域。
原始資料包含網域,但是網域前面不包含 http e.g. tw.news.yahoo.com 或 www.bbc.co.uk。使用 Google 試算表 [https://support.google.com/docs/answer/3098292?hl=zh-Hant REGEXMATCH] 函數,符合正規表示法的規則的話,回傳 TRUE。若不符合,則回傳 FALSE。 {{exclaim}} 以下語法未處理 [https://zh.wikipedia.org/wiki/IPv4 IPv4] 形式的網域。
<pre>
<pre>
=REGEXMATCH(A1, ("[a-zA-Z0-9]{2,}\.[a-z]{2,}$"))
=IF(ISERROR(REGEXMATCH(A1, "([A-Za-z0-9]+\.[a-z]{2,}$|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})")), FALSE, REGEXMATCH(A1, "([A-Za-z0-9]+\.[a-z]{2,}$|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"))
</pre>
</pre>


Line 85: Line 85:


輸入2:
輸入2:
<pre>
127.0.0.0
</pre>
輸出2:
<pre>
TRUE
</pre>
輸入3:
<pre>
<pre>
Yahoo! 新聞
Yahoo! 新聞
</pre>
</pre>


輸出2:
輸出3:
<pre>
<pre>
FALSE
FALSE

Revision as of 11:56, 11 October 2016

使用正規表示法 (Regular expression) ,從文章內容中擷取網址 (又稱 統一資源定位符, Uniform Resource Locator)。

擷取完整網址

使用 Google 試算表 REGEXEXTRACT 函數,從文章內容擷取第一個網址。

=REGEXEXTRACT(A1, "(http[s]?://[a-zA-Z0-9\-_\\._~\:\/\?#\[\]@\!\$&'\(\)\*\+,;\=%]+)")

輸入:

Yahoo! 新聞 https://tw.news.yahoo.com/abc

輸出:

https://tw.news.yahoo.com/abc

說明:

  1. 網址可能是 http:// 或 https:// 開頭,所以條件是 http[s]?://
  2. 根據 RFC 3986Section 2: Characters 網址允許的文字有 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=,其他文字則需要加上比例符號 % 編碼。 [1]

擷取網址中的網域部分

=REGEXEXTRACT(A1, "(http[s]?\://[^/]+)")

輸入:

Yahoo! 新聞 https://tw.news.yahoo.com/abc

輸出:

https://tw.news.yahoo.com/

說明:

  1. 網域指 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。 Icon_exclaim.gif 以下語法未處理 IPv4 形式的網域。

=IF(ISERROR(REGEXMATCH(A1, "([A-Za-z0-9]+\.[a-z]{2,}$|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})")), FALSE, REGEXMATCH(A1, "([A-Za-z0-9]+\.[a-z]{2,}$|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"))

輸入1:

www.bbc.co.uk

輸出1:

TRUE

輸入2:

127.0.0.0

輸出2:

TRUE

輸入3:

Yahoo! 新聞

輸出3:

FALSE

References