Validate E-mail地址的regex

最近寫一些code會用到regex (regular expression),中文翻譯為正規表示式或正則表示式(坦白說我比較喜歡引用前者,後者比較難以理解regex是什麼東西),用途很多主要是表達一串字串的樣式(例如:身分證字號第一碼是英文,後面有九碼數字)。

不懂程式的話本斷可以跳過,之前在處理文字的時候因為要把用括號([…])中間的文字去除。我的文章會長的像下面這樣:林國喵是個[好人],每天固定會扶一個[老太太]過馬路呢!所以我的預期結果是:林國喵是個,每天固定會扶一個過馬路呢!但是我寫了個regex長的是這樣 [{1}S*]{1},這邊寫得的簡單"["在開頭會出現一次({1})中間夾著任意非空白字元S多次(*),結果會變成:林國喵是個過馬路呢!結果會把中間的字串也去掉因為S包含括號,因此必須把括號給排除才行所以,正確的寫法要變成這麼一段:[\[<]{1}[^\[\]<>]*[\]>]{1},當然也許是因為我笨所以才寫成那麼長的。

上面那段寫了很多主要就是要說,即使是個簡單的pattern寫成regex也可能會變成很長的一串,剛剛看書有寫到e-mail格式的正確性辨識的regex,竟然寫到長達一千多的字,沒注意看的話還會以為是亂碼呢!附上連結,有需要自己去看吧:

http://ex-parrot.com/~pdw/Mail-RFC822-Address.html

有些東西真的是可以想得很簡單,也可以想得很複雜…