動動手來學Regular Expression 正規表達式 | regular expression
[a-zA-z]{3,}|D$|[0-9a-z]*$|[0-9A-Z]*$相信大家在寫程式的過程當中,一定都曾看到過像上面這種,有點像亂寫的程式碼,有些可能看起來沒那麼複雜,而有些則是長到讓人難以招架,光是看到就讓人頭痛,更不用說去讀懂它了。事實上,這種程式碼叫做正規表達式(RegExp,RegularExpression),是處理文字非常重要的利器,當你希望規範文字的格式、或者是限制使用者的文字格式時,正規表達式是不可或缺的存在。文首的表達式是我超級討厭的銀行密碼格式(還有PlayStayionNetwork的密碼格式),會找出這些格式:超過連續三個英文字母(不分大...
[a-zA-z]{3,}|D$|[0-9a-z]*$|[0-9A-Z]*$
相信大家在寫程式的過程當中,一定都曾看到過像上面這種,有點像亂寫的程式碼,有些可能看起來沒那麼複雜,而有些則是長到讓人難以招架,光是看到就讓人頭痛,更不用說去讀懂它了。
事實上,這種程式碼叫做正規表達式(RegExp,Regular Expression),是處理文字非常重要的利器,當你希望規範文字的格式、或者是限制使用者的文字格式時,正規表達式是不可或缺的存在。
文首的表達式是我超級討厭的銀行密碼格式(還有 PlayStayion Network 的密碼格式),會找出這些格式:
超過連續三個英文字母(不分大小寫) 沒有任何數字 沒有任何大寫字母 沒有任何小寫字母只要你設立的密碼符合以上任何一個格式,程式就會拒絕你使用這組密碼,以這樣的方式來讓使用者建立出一個安全性相對高的密碼——雖然很多時候都是徒勞無功的。
在這篇文章當中,希望可以透過簡單明瞭的方式來講解正規表達式,並且讓大家在未來撰寫或閱讀正規表達式的時候,能夠得心應手,無所畏懼。
在 Ruby 裡面,有幾種方式可以定義正規表達式,比較普遍的方式是用 slash(/) 將正規表達式包起來,像是 /[a-zA-Z]*/,而另一種方式則是用 Ruby 的 class生成,變成、 Regexp.new([a-zA-Z]*) ,值得注意的是,使用第二種方式不需要加入 slash,只要將內容以字串方式傳入即可。大部分情況下我們會看到第一種方式,少部分的情況下,特別是需要動態產生正規表達式的時候,第二個方式會比較好用。最後則是將利用 %r{[a-zA-Z]*} 這樣的方式也可以定義正規表達式。
使用 %r 的情況下,不需要將 {} 裡面的表達式包成字串
在正規表達式當中,我們有幾個比較常用的 Match Character 來表示我們的規則:
Match Character 規則 . 所有字元 w 所有字母,包含大小寫跟數字 d 所有數字(0-9) D 除了數字以外的字元 [ ] 指定的範圍,例如[a-f]當然,只有 Match Character 還不夠,我們還必須指定字元是否重複,或者重複的次...