之前在練習python的一些小專案就有初次接觸到正規表示法
但當時還真是完全看不懂在說三小,但在字串處理時又實在是個很實用的方法,今天又找了個時間靜下心來看一看,總算是比較瞭解了。
首先在線上有兩個測試的網站我覺得挺不錯的
https://regex101.com/(可以測試python、JS或PHP)
https://rubular.com/(測試ruby)
但其實regrex在不同語言中的語法相同,僅是配合的方法或搭配的寫法不太一樣
自己對regrex的理解很單純:電腦用來判定字串的規則
所以regrex就可以配合檢索、替換符合規則的文字
其中語法網路上有非常多資源了,這邊不做細項的贅述,只做幾個比較常用的語法紀錄
符號意義(只對比較難懂的做註記)
- ^ 開頭 #^dan 會匹配 danny dan danx 等字元
- &結尾 #ny$ 會匹配 danny benny evny等字元
- \d 匹配0-9所有數字
- \D 匹配所有非數字
- \w匹配所有文字,包含字母 數字以及底線
- \W匹配所有非文字,就是除了底線以外的符號都匹配
- [] 匹配中括號內字元 # [abce]會匹配aaabbcee 不管出現幾次,只要字串內的字都在中括號內都會匹配
- [^] 與上面相反
- \b 匹配空格
- ? 匹配一個或零個字元 #1? 字串中出現一個或零個1的時候會匹配
- *匹配零個或一個以上字元
- +匹配一個或一個以上字元 #123+ 會匹配123333333333
- {a,b}出現最少a次 最多b次 #a{2,4} 會匹配bbaaa baa baaaa等字 前後範圍可以拿掉
- () 小括號內的我全都要,一字不差 連順序都要一樣
- – 破折號,指定範圍 例如[a-zA-Z]表示大小寫的英文字母我都要
乍看之下一定是覺得霧颯颯,以下做個範例加深印象
舉個例子來說,今天若是你要驗證使用者輸入的是不是生日的格式(1991-04-14)
regrex的寫法就應該要是 ^\d{4}-\d{1,2}-d{1,2}$
分段翻譯就是,開頭要是四個數字 中間一個破折號 然後1~2個數字 中間一個破折號 最後是1~2個數字的結尾,滿足這條件的字串才匹配
以下我用python寫一個簡單的驗證程式做手機號碼的驗證
import re
pattern = r'^09[0-9]{2}-\d{3}-\d{3}$'
x = input("plz enter your phone number ex.0933-558-555\n")
match = re.search(pattern, x)
if not match:
print ("try again!")
else:
print ("perfect!")
注意在python跟ruby中你需要搭配不同的方法來使用
有趣的是他們都同樣有match的方法,只是在模式(也就是上方程式碼的pattern)寫法稍微不太一樣
python r’pattern’
ruby /pattern/
也就是說,上方的程式碼若是改用ruby改寫,在判斷的地方就會變成像這個樣子
if x.match(/^09[0-9]{2}-\d{3}-\d{3}$/)
挺簡單的吧?其實沒這麼難嘛~接著就是多練習常見的判斷式
身分證字號、包含多字元密碼等
沒接觸過regrex的 看到這篇一定不知道我在說三小,真的只是寫給自己看的 歹勢。