正則表達式備忘錄

\b

\b是正則表達式規定的一個特殊代碼,也叫元字符(metacharacter),代表著單詞的開頭或結尾,也就 是單詞的分界處。雖然通常英文的單詞是由空格,標點符號或者換行來分隔的,但是\b并 不匹配這些單詞分隔字符中的任何一個,它只匹配一個位置。
如果需要更精確的說法,\b匹配這樣的位置:它的前一個字符 和后一個字符不全是(一個是,一個不是或不存在)\w。

. 和 *

.是另一個元字符,匹配除了換行符以 外的任意字符。同樣是元字符,不過它代表的不是字符,也不是位置,而是數量——它 指定前邊的內容可以連續重復使用任意次以使整個表達式得到匹配。因此,.連在一起就意味著任意數量的不包含換行的字符?,F在 \bhi\b.\bLucy\b 的意思就很明顯了:先是一個單詞 hi,然后是任意個任意字符(但不能是換行),最后是Lucy這個單詞。

換行符就是'\n',ASCII編碼為10(十六進制0x0A)的字符。

\d

\d是個元字符,匹配一位數字。
0\d\d-\d\d\d\d\d\d\d\d匹配這樣的字符串:以0開頭,然后是兩個數字,然后是一個連字號“-”,最后是8個數字(也就是中國的電話號碼。當然,這個例子只 能匹配區號為3位的情形)。
為了避免重復,我們也可以這樣寫這個表達式:0\d{2}-\d{8}。 這里\d后面的{2}、{8}的意思是前面\d必須連續重復匹配2次、8次。

+

\d+匹配1個或更多連續的數字。 這里的+是和類似的元字符,不同的是匹配重復任意次(可能是0次),而+則匹配重復1次或更多次。

\s

\s匹配任意的空白 符,包括空格,制表符(Tab),換行符,中文全角空格等。

\w

\w匹配字母或數字或下劃線或漢字等。

[]

[aeiou]就匹配任何一個英文元音字母,[.?!]匹配標點符號(.或?或!)。

我們也可以輕松地指定一個字符范圍,像[0-9]代 表的含意與\d就是完全一致的:一位數字; 同理[a-z0-9A-Z_]也完全等同于\w(如 果只考慮英文的話)。

代碼 說明
. 匹配除換行符以外的任意字符
\w 匹配字母或數字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數字
\b 匹配單詞的開始或結束
^ 匹配字符串的開始
$ 匹配字符串的結束
代碼 說明
* 重復零次或更多次
+ 重復一次或更多次
? 重復零次或一次
{n} 重復n次
{n,} 重復n次或更多次
{n,m} 重復n到m次

練習:

正則:\(?0\d{2}[) -]?\d{8}
釋義:這個表達式可以匹配幾種格式的電話號碼,像(010)88886666,或022-22334455, 或02912345678等。我們對它進行一些分析吧:首先是一個轉義字符(,它能出現0次或1次(?),然后是一個0,后面跟著2個數字(\d{2}),然后是)或-或空格中 的一個,它出現1次或不出現(?),最后是8個數字(\d{8})。

分枝條件

|

正則表達式里的分枝條件指的是有幾種規則,如 果滿足其中任意一種規則都應該當成匹配,具體方法是用|把不同的規則分隔開。
0\d{2}-\d{8}|0\d{3}-\d{7} 這個表達式能匹配兩種以連字號分隔的電話號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號 (0376-2233445)。

分組

()

用小括號來指定子表達式(也叫做分組),然后你就可以指定這個子表達式的重復次數。

(\d{1,3}\.){3}\d{1,3}是一個簡單的IP地址匹配表達式。要理解這個表達式,請按下列順序分析它:\d{1,3}匹 配1到3位的數字,(\d{1,3}.){3}匹 配三位數字加上一個英文句號(這個整體也就是這個分組)重 復3次,最后再加上一個一到三位的數字(\d{1,3})。

反義

有時需要查找不屬于某個能簡單定義的字符類的字符。比如想查找除了數字以外,其它任意字符都行的情況,這時需要用到反義:

代碼 說明
\W 匹配任意不是字母,數字,下劃線,漢字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非數字的字符
\B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字符

例子:
\S+匹配不包含空白符的字符串。
<a[^>]+>匹配用 尖括號括起來的以a開頭的字符串。

后向引用

零寬斷言

負向零寬斷言

注釋

貪婪與懶惰

處理選項

平衡組/遞歸匹配

未完待續......

From http://www.oschina.net/question/12_9507?fromerr=GPofWDZj

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位,可能是字母,數字,標點符號,空格,換行符,漢字等...
    獅子挽歌閱讀 2,178評論 0 9
  • 推薦幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1閱讀 11,555評論 9 151
  • 幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    沒技術的BUG開發攻城獅閱讀 4,622評論 0 23
  • 注:本篇文章只為方便查看,特此保留,如有冒犯,敬請諒解?。?! 本文目標 30分鐘內讓你明白正則表達式是什么,并對它...
    阿杰Alex閱讀 1,508評論 0 10
  • 本文譯自 制作正則引擎的作者 Jan Goyvaerts 為工具 RegexBuddy 寫的教程版權歸原作者所有注...
    極客圈閱讀 3,323評論 0 25