今天要來介紹的是正則表達式。
為什麼前幾天都還在講 Telegram Bot ,突然會冒出一個沒有什麼關係的正則表達式呢?
當然是因為 Telegram Bot 也可以使用正則表達式啊。
首先先來簡單介紹一下正則表達式,正則表達式簡單說就是一個規則,我們可以根據這個規則搜尋出符合我們所想的字串,因此我們需要先建立規則再去匹配字串是否符合我們的規則。
舉例來說我們有很多 Youtube 的連結,有兩組正常的 Youtube 連結,跟其他看起來很像,但是並不是 Youtube 的連結,那麼要找出來正常的就有點麻煩,好在 Youtube 的連結是有規則的,我們就可以透過正則表達式快速找出正常的連結。
https://www.youtube.com/watch?v=zIn40ysBJvY
http://www.youtubeabc.com/watch?v=zIn40ysBJvY
http://www.youtude.com/watch?v=zIn40ysBJvY
https://youtu.be/zIn40ysBJvY
http://www.youtu.com/watch?v=zIn40ysBJvY
首先正則表達式通常是由 /
開始的,然後對於字元可以簡單分為顯示字元、非顯示字元;顯示字元又可分為數字、文字、空格及非空格(非空格包含數字及文字)。
正則表達式 | 描述 |
---|---|
\d | 數字, 0~9 |
\w | 文字, A~Z 及 a~z |
\s | 空格, 空白鍵 |
\w | 文字、數字及底線(_) |
\S | 非空格, 包含數字及文字 |
. | 除了 \n 及 \r 以外的任何字元 |
但是上面這些都是匹配固定規則的,如果我們想要自訂規則的話我們可以使用中括號(如果需要精確匹配某個字元直接輸入就可以了)。
正則表達式 | 描述 |
---|---|
[ABC] | 大寫的 A 、 B 跟 C |
[^ABC] | 除了大寫的 A 、 B 跟 C 以外的所有 |
[A-Z] | 大寫的 A 到 Z |
[^A-Z] | 除了大寫的 A 到 Z 以外的所有 |
接著以上我們都是匹配單個字元,如果需要匹配多個字元我們可以加上以下表達式
正則表達式 | 描述 |
---|---|
? | 0 或 1 次 |
+ | 1 或多次 |
* | 0 或多次 |
{n} | 精確的 n 次(不接受負數) |
{n,} | n 次以上 |
{n,m} | n 至 m 次 |
如果我們要匹配手機號碼就可以這樣匹配。
09\d{8}
最後補充一個有點特殊但我還蠻常用的,如果需要將字串中的某段進行不一樣的匹配,我們可以使用 ()
進行子表達式的匹配。
基本的正則表達式大概就是如此。
我們再來寫個正則表達式匹配一下 Youtube 的連結,我們可以寫成如下
https://(www.)?youtu\.?be(.com)?/(watch\?v=)?\w*
各位可以到以下連結驗證看看哪兩個連結是正確的連結。
https://c.runoob.com/front-end/854/?optionGlobl=global
至於說了這麼多, Telegram Bot 的哪邊又可以使用到呢?
我們在 CallbackQueryHandler 處理按鈕的回傳時,就可以使用到正則表達式來匹配我們的訊息,節省了一堆 if else 的使用。
CallbackQueryHandler 中有個參數 pattern
可以直接輸入正則表達式來匹配對應的訊息,讓我們的程式碼可以更加的精簡。
那麼就先到這邊,話說這篇好像有點跟 Telegram Bot 無關了。
大家掰~掰~