解釋
元字元是一個或一組代替一個或多個字元的字元。聽起來有點拗口,但舉一個例子也許你就明白了:元字元*用來匹配0個或多個的前一字元;而元字元.用來匹配一個任意的一個字元(除換行符外)。
字元套用
較為常用的元字元包括: “+”, “*”,以及 “?”。其中,“+”元字元規定其前導字元必須在目標對象中連續出現一次或多次,“*”元字元規定其前導字元必須在目標對象中出現零次或連續多次,而“?”元字元規定其前導對象必須在目標對象中連續出現零次或一次。
下面,就讓我們來看一下
正則表達式元字元的具體套用。
/fo+/
因為上述正則表達式中包含“+”元字元,表示可以與目標對象中的 “fo”, “foo”, 或者 “fooo” 等在字母f後面連續出現一個或多個字母o的字元串相匹配。
/eg*/
因為上述正則表達式中包含“*”元字元,表示可以與目標對象中的 “e”, “eg” 或者 “egg” 等在字母e後面連續出現零個或多個字母g的字元串相匹配。
/Wi?/
因為上述正則表達式中包含“?”元字元,表示可以與目標對象中的 “W”, 或者 “Wi”,等在字母i後面連續出現零個或一個字母 i 的字元串相匹配。
除了元字元之外,用戶還可以精確指定模式在匹配對象中出現的頻率。例如,
/jim{2,6}/
上述
正則表達式規定字元m可以在匹配對象中連續出現2-6次,因此,上述正則表達式可以同jimmy或jimmmmmy等字元串相匹配。
使用方式
在對如何
使用正則表達式有了初步了解之後,我們來看一下其它幾個重要的元字元的使用方式。
\S:用於匹配除單個空格符之外的所有字元;
\d:用於匹配從0到9的數字;
\w:用於匹配字母,數字或下劃線字元;
\W:用於匹配所有與\w不匹配的字元;
. :用於匹配除換行符之外的所有字元。
(說明:我們可以把\s和\S以及\w和\W看作互為逆運算)
下面來看看更多的例子:
\ba\w*\b匹配以字母a開頭的單詞——先是某個單詞開始處(\b),然後是字母a,然後是任意數量的字母或數字(\w*),最後是單詞結束處(\b)。
好吧,我們說說
正則表達式里的單詞是什麼意思吧:就是不少於一個的連續的\w。不錯,這與學習英文時要背的成千上萬個同名的東西的確關係不大 :)
\d+匹配1個或更多連續的數字。這裡的+是和*類似的元字元,不同的是*匹配重複任意次(可能是0次),而+則匹配重複1次或更多次。
\b\w{6}\b 匹配剛好6個字元的單詞。
元字元^(和數字6在同一個鍵位上的符號)和$都匹配一個位置,這和\b有點類似。^匹配你要用來查找的字元串的開頭,$匹配結尾。這兩個代碼在驗證輸入的內容時非常有用,比如一個網站如果要求你填寫的QQ號必須為5位到12位數字時,可以使用:^\d{5,12}$。
這裡的{5,12}和前面介紹過的{2}是類似的,只不過{2}匹配只能不多不少重複2次,{5,12}則是重複的次數不能少於5次,不能多於12次,否則都不匹配。
因為使用了^和$,所以輸入的整個字元串都要用來和\d{5,12}來匹配,也就是說整個輸入必須是5到12個數字,因此如果輸入的QQ號能匹配這個
正則表達式的話,那就符合要求了。
和忽略大小寫的選項類似,有些正則表達式處理工具還有一個處理多行的選項。如果選中了這個選項,^和$的意義就變成了匹配行的開始處和結束處。
egrep元字元總結
匹配單個字元的元字元
. 點號 匹配單個任意字元
[…] 字元組 匹配單個列出的字元
[^…] 排除型字元組 匹配單個未列出的字元
\char
轉義字元 若char是元字元,或轉義序列無特殊含義時,匹配char對應的普通字元
提供計數功能的元字元
? 問號 容許匹配一次,但非必須
* 星號 可以匹配任意多次,也可能不匹配
+ 加號 至少需要匹配一次,至多可能任意多次
{min,max} 區間量詞 至少需要min次,至多容許max次
匹配位置的元字元
^ 脫字元 匹配一行的開頭位置
$ 美元符 匹配一行的結束位置
\< 單詞分界符 匹配單詞的開始位置
\> 單詞分界符 匹配單詞的結束位置
其他元字元
| alternation 匹配任意分隔的表達式
(…) 括弧 限定多選結構的範圍,標註量詞作用的元素,為
反向引用”捕獲”文本
\1,\2,… 反向引用 匹配之前的第一、第二組括弧內的字
表達式匹配的文本
使用括弧的3個理由:限制多選結構、分組、捕獲文本
-i的參數很有用,它能忽略大小寫的匹配
轉義有3種情況:
1. \ 加上元字元,表示匹配元字元所使用的普通字元。
2. \ 加上非元字元,組成一種由具體實現方式規定其意義的元字元序列 如\<表示單詞的起始邊界。
3. \ 加上任意其他字元,默認情況就是匹配此字元,也就是說,反斜線被忽略了。