iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
0
自我挑戰組

從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!系列 第 19

Day19 | RegExp正規表式法

之前在寫一道Codewars的題目,在程式裡寫了像是這樣的東西/^P/
這神秘又奇怪得寫法是什麼呢?它其實就是Regular Expression

再來看看其他得/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})/
能幫解讀它嗎?也許當下自己寫出來得還可以解釋,但下次看到應該還是掛滿問號。

正規表達式Regular Expression

正規表達式RegExp,資料表單格式或是限制使用者輸入的文字格式
在資料文件處理驗證這一塊,正規表達式的存在是很重要的。

規則

Ruby的RegExp會把比對得內容寫在兩條斜線//的中間。
因為RegExp的規則很多,有得較為複雜難懂(個人認為啦~所以先看常使用到的規則

[]         指定的範圍
[abc]	   選擇所有a、b、c
[^abc]	   除a、b、c外的任何字元
[a-z]	   選擇所有a-z範圍內的字元
[a-zA-Z]   選擇所有a-z或A-Z範圍內的字元
\s	     空白字元
\S	     非空白字元
\d	     數字
\D	     非數字
\w	     數字、字母、底線
\W	     非字母、數字以及底線,與 \w 剛好相反
()       分組
{m,n}    其前符號的內容,最少出現 m 次,最多出現 n 次
^        輸入字串的開始位置
$        輸入字串的結束位置
?        表示字串中有 0 到 1 個其前一符號的內容
.        表示一個任意字元
+        表示字串中有 1 到多個與其前一符號的內容
*        表示字串中有 0 到多個與其前一符號的內容

試試看

有了以上的規則就簡單可以來到這個網站試試看rubular.com
就來玩玩這個/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})/,這段是用在email信箱
當我們給了四種常見的使用者email格式

"Min Lo" <abc123@email.com>
Min Lo <abc123@email.com>
"Min Lo" abc123@email.com
Min Lo abc123@email.com

最後的結果都只會選到abc123@email.com
RegExp實在很難用背的,對這有興趣想研究得朋,可以先到網站玩組合喔!

也可以利用=~方法比對運算

"abcdef" =~ /d/    # 3
"aaaaaa" =~ /d/    # nil

有發現符合條件,就會回傳字串的位置回,沒有符合就會傳回nil。

參考連結:
動動手來學 Regular Expression 正規表達式
正規表示式 Regular Expression


上一篇
Day18 | or-equals ||= 是什麼
下一篇
Day20 | Public Private Protected methods
系列文
從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言