正規表達式
對于初學很難,明明就幾個規則,咋就是學不會,不會寫呢,到底正規表達式是啥,
筆者摘錄一部分易于解釋的文章幫助大家了解。
正規表達式(regular expression)就是用一個“字元串”來描述一個特征,然後去驗證另一個“字元串”是否符合這個特征。比如 表達式“ab+” 描述的特征是“一個 'a' 和 任意個 'b' ”,那麼 'ab', 'abb', 'abbbbbbbbbb' 都符合這個特征, 這個解釋好了解。
正規表達式可以用來:(1)驗證字元串是否符合指定特征,比如驗證是否是合法的郵件位址。(2)用來查找字元串,從一個長的文本中查找符合指定特征的字元串,比查找固定字元串更加靈活友善。(3)用來替換,比普通的替換更強大,其實這點在我們常用的編輯器就可以發現,大多的文本編輯器都應用了正規表達式。 --完美,像我這樣不懂的人也了解了。
1. 學習基本的規則
2. 學習工具
3. 多實踐,實踐是學習和認知的最終歸宿
------------------------------------------------------------------------------
以下是摘錄,寫的非常易于了解:
1. 正規表達式規則 1.1 普通字元 字母、數字、漢字、下劃線、以及後邊章節中沒有特殊定義的标點符号,都是 " 普通字元 " 。表達式中的普通字元,在比對一個字元串的時候,比對與之相同的一個字元。
舉例1:表達式 "c",在比對字元串 "abcde" 時 ,比對結果是:成功;比對到的内容是: "c" ;比對到的位置是:開始于 2 ,結束于 3 。(注:下标從 0 開始還是從 1 開始,因目前程式設計語言的不同而可能不同)
舉例2:表達式 "bcd",在比對字元串 "abcde" 時 ,比對結果是:成功;比對到的内容是: "bcd" ;比對到的位置是:開始于 1 ,結束于 4 。 1.2 簡單的轉義字元 一些不便書寫的字元,采用在前面加 "\" 的方法。這些字元其實我們都已經熟知了。
表達式 | 可比對 |
\r, \n | 代表回車和換行符 |
\t | 制表符 |
\\ | 代表 "\" 本身 |
還有其他一些在後邊章節中有特殊用處的标點符号,在前面加 "\" 後,就代表該符号本身。比如: ^, $ 都有特殊意義,如果要想比對字元串中 "^" 和 "$" 字元,則表達式就需要寫成 "\^" 和 "\$" 。
表達式 | 可比對 |
\^ | 比對 ^ 符号本身 |
\$ | 比對 $ 符号本身 |
\. | 比對小數點( . )本身 |
這些轉義字元的比對方法與 " 普通字元 " 是類似的。也是比對與之相同的一個字元。
舉例1:表達式 "\$d",在比對字元串 "abc$de" 時 ,比對結果是:成功;比對到的内容是: "$d" ;比對到的位置是:開始于 3 ,結束于 5 。 1.3 能夠與 '多種字元' 比對的表達式 正規表達式中的一些表示方法,可以比對 ' 多種字元 ' 其中的任意一個字元。比如,表達式 "\d" 可以比對任意一個數字。雖然可以比對其中任意字元,但是隻能是一個,不是多個。這就好比玩撲克牌時候,大小王可以代替任意一張牌,但是隻能代替一張牌。
表達式 | 可比對 |
\d | 任意一個數字, 0~9 中的任意一個 |
\w | 任意一個字母或數字或下劃線,也就是 A~Z,a~z,0~9,_ 中任意一個 |
\s | 包括空格、制表符、換頁符等空白字元的其中任意一個 |
. | 小數點可以比對除了換行符( \n )以外的任意一個字元 |
舉例1:表達式 "\d\d",在比對 "abc123" 時 ,比對的結果是:成功;比對到的内容是: "12" ;比對到的位置是:開始于 3 ,結束于 5 。
舉例2:表達式 "a.\d",在比對 "aaa100" 時 ,比對的結果是:成功;比對到的内容是: "aa1" ;比對到的位置是:開始于 1 ,結束于 4 。 1.4 自定義能夠比對 '多種字元' 的表達式 使用方括号 [ ] 包含一系列字元,能夠比對其中任意一個字元。用 [^ ] 包含一系列字元,則能夠比對其中字元之外的任意一個字元。同樣的道理,雖然可以比對其中任意一個,但是隻能是一個,不是多個。
表達式 | 可比對 |
[[email protected]] | 比對 "a" 或 "b" 或 "5" 或 "@" |
[^abc] | 比對 "a","b","c" 之外的任意一個字元 |
[f-k] | 比對 "f"~"k" 之間的任意一個字母 |
[^A-F0-3] | 比對 "A"~"F","0"~"3" 之外的任意一個字元 |
舉例1:表達式 "[bcd][bcd]" 比對 "abc123" 時 ,比對的結果是:成功;比對到的内容是: "bc" ;比對到的位置是:開始于 1 ,結束于 3 。
舉例2:表達式 "[^abc]" 比對 "abc123" 時 ,比對的結果是:成功;比對到的内容是: "1" ;比對到的位置是:開始于 3 ,結束于 4 。 1.5 修飾比對次數的特殊符号 前面章節中講到的表達式,無論是隻能比對一種字元的表達式,還是可以比對多種字元其中任意一個的表達式,都隻能比對一次。如果使用表達式再加上修飾比對次數的特殊符号,那麼不用重複書寫表達式就可以重複比對。
使用方法是: " 次數修飾 " 放在 " 被修飾的表達式 " 後邊。比如: "[bcd][bcd]" 可以寫成 "[bcd]{2}" 。
表達式 | 作用 |
{n} | 表達式重複 n 次,比如: "\w{2}" 相當于 "\w\w" ; "a{5}" 相當于 "aaaaa" |
{m,n} | 表達式至少重複 m 次,最多重複 n 次,比如: "ba{1,3}"可以比對 "ba"或"baa"或"baaa" |
{m,} | 表達式至少重複 m 次,比如: "\w\d{2,}"可以比對 "a12","_456","M12344"... |
? | 比對表達式 0 次或者 1 次,相當于 {0,1} ,比如: "a[cd]?"可以比對 "a","ac","ad" |
+ | 表達式至少出現 1 次,相當于 {1,} ,比如: "a+b"可以比對 "ab","aab","aaab"... |
* | 表達式不出現或出現任意次,相當于 {0,} ,比如: "\^*b"可以比對 "b","^^^b"... |
舉例1:表達式 "\d+\.?\d*" 在比對 "It costs $12.5" 時 ,比對的結果是:成功;比對到的内容是: "12.5" ;比對到的位置是:開始于 10 ,結束于 14 。
舉例2:表達式 "go{2,8}gle" 在比對 "Ads by goooooogle" 時 ,比對的結果是:成功;比對到的内容是: "goooooogle" ;比對到的位置是:開始于 7 ,結束于 17 。 1.6 其他一些代表抽象意義的特殊符号 一些符号在表達式中代表抽象的特殊意義:
表達式 | 作用 |
^ | 與字元串開始的地方比對,不比對任何字元 |
$ | 與字元串結束的地方比對,不比對任何字元 |
\b |
--------------------------------------------------------------------------------------------------------
工具:RegexBuddy 非常好用的正則工具,關于工具的使用,在使用的時候會說明
最後告知大家,要多實踐。用多了就明白了,會了。