之前在寫一道Codewars的題目,在程式裡寫了像是這樣的東西/^P/
這神秘又奇怪得寫法是什麼呢?它其實就是Regular Expression
再來看看其他得/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})/
能幫解讀它嗎?也許當下自己寫出來得還可以解釋,但下次看到應該還是掛滿問號。
正規表達式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