正則表達式在線測試:
http://tool.chinaz.com/regex
參考資料:《學習正則表達式》Michael Fitzgerald O'reilly
從匹配北美電話號碼開始
707-827-7019
- 匹配 0 到 9 范圍內的任意數字。
正則表達式中[和]是元字符,因此方括號不參加匹配。[0-9]這種形式的正則表達式乘坐字符組,有時候也加字符集。
[0-9]
希望縮小匹配的數字范圍:
[012789]使用轉義字符
\d:
使用轉義字符\d可以使用以下表達式來匹配文字中的內容。
\d\d\d-\d\d\d-\d\d\d\d如果連接符不是-,而是_或者|:, 那么可以使用如下方式進行匹配:
\d\d\d.\d\d\d.\d\d\d\d
那么,他能夠匹配:
707%827%7019
707|827|7019
捕獲分組和向后引用
考慮,我們想要匹配 707 , 這個時候我們需要編寫一個捕獲分組和向后引用。使用一對括號,()表示對分組的捕獲。
(\d)\d\1
這個正則表達式的意思:
-
(\d)匹配第一個數字并將其捕獲, 數字7。 -
\d匹配第二個數字(數字0), 但是沒有捕獲。 -
\1表示對捕獲的數字進行反引用(數字7)。
使用量詞
使用量詞可以使正則表達式變得非常簡化并且美觀。
\d {3}-?\d{3}-?\d{4}
量詞一定跟在需要匹配的內容的后面,花括號中的數字表示匹配內容出現的次數。
- ? 是另外一種量詞,表示可以出現或者只出現一次。
- + 表示出現一個或者多個。
- * 表示出現0個或者多個。
更加簡潔的表示方法:
(\d{3, 4}[. -]?) +
這個表達式不是完全對,因為它只能匹配3個或這個4個的數字,需要更加進一步改進。
(\d{3}[. -]?){2}\d{4}
如果區(qū)號也是可選的,并且(707)-827-7019 的括號也是可選的。
707-827-8019
(707)-827-8019
827-8019
8278019
(^\d{3}|\(\d{3}\))?-?\d{3}-?\d{4}