引言
基礎進階
工具資料
引言
Regex(regular expression)就是用一個“字串”來描述一個特徵,然後去驗證另一個“字串”是否符合這個特徵。比如 運算式“ab+” 描述的特徵是“一個 'a' 和 任意個 'b' ”,那麼 'ab', 'abb', 'abbbbbbbbbb' 都符合這個特徵。
Regex可以用來:(1)驗證字串是否符合指定特徵,比如驗證是否是合法的郵件地址。(2)用來尋找字串,從一個長的文本中尋找符合指定特徵的字串,比尋找固定字串更加靈活方便。(3)用來替換,比普通的替換更強大。
Regex學習起來其實是很簡單的,不多的幾個較為抽象的概念也很容易理解。之所以很多人感覺Regex比較複雜,一方面是因為大多數的文檔沒有做到由淺入深地講解,概念上沒有注意先後順序,給讀者的理解帶來困難;另一方面,各種引擎內建的文檔一般都要介紹它特有的功能,然而這部分特有的功能並不是我們首先要理解的。
節選自:揭開Regex的神秘面紗 http://www.regexlab.com/zh/regref.htm
基礎進階
· 一般字元
· 簡單的逸出字元
· 字元集合
· 自訂字元集合
· 匹配次數修飾
· 特殊符號
------------
· 貪婪與非貪婪
· 反向引用
· 預搜尋
------------
· 其他規則
· 更多提示
節選自:揭開Regex的神秘面紗 http://www.regexlab.com/zh/regref.htm
- Regex到底是什麼東西?
- 入門
- 測試Regex
- 元字元
- 字元轉義
- 重複
- 字元類
- 分枝條件
- 反義
- 分組
- 後向引用
- 零寬斷言
- 負向零寬斷言
- 注釋
- 貪婪與懶惰
- 處理選項
- 平衡組/遞迴匹配
- 還有些什麼東西沒提到
節選自:Regex30分鐘入門教程 http://deerchao.net/tutorials/regex/regex.htm
字元邊界:本身不匹配任何字元,只對字元邊界和字元間縫隙附加條件的運算式。
^ 當前位置必須是文本開始位置
$ 當前位置必須是文本結束位置
\b 當前位置的左右兩側,只能有一側是字母數字或底線
如果Regex的匹配模式為 MULTILINE 模式,^ 可匹配一行文本的行首,$ 可匹配一行文本的行末。更多詳情,參見Regex匹配模式。
當 \b 被包含於字元集合中時,\b 代表退格符(ASCII碼 = 8)。
假設你在一篇英文小說裡尋找hi,你可以使用Regexhi。
這幾乎是最簡單的Regex了,它可以精確匹配這樣的字串:由兩個字元組成,前一個字元是h,後一個是i。通常,處理Regex的工具會提供一個忽略大小寫選項,如果選中了這個選項,它可以匹配hi,HI,Hi,hI這四種情況中的任意一種。
不幸的是,很多單詞裡包含hi這兩個連續的字元,比如him,history,high等等。用hi來尋找的話,這裡邊的hi也會被找出來。如果要精確地尋找hi這個單詞的話,我們應該使用\bhi\b。
\b是Regex規定的一個特殊代碼(好吧,某些人叫它元字元,metacharacter),代表著單詞的開頭或結尾,也就是單詞的分界處。雖然通常英文的單詞是由空格,標點符號或者換行來分隔的,但是\b並不匹配這些單詞分隔字元中的任何一個,它只匹配一個位置。
如果需要更精確的說法,\b匹配這樣的位置:它的前一個字元和後一個字元不全是(一個是,一個不是或不存在)\w。
假如你要找的是hi後面不遠處跟著一個Lucy,你應該用\bhi\b.*\bLucy\b。
這裡,.是另一個元字元,匹配除了分行符號以外的任一字元。*同樣是元字元,不過它代表的不是字元,也不是位置,而是數量——它指定*前邊的內容可以連續重複使用任意次以使整個運算式得到匹配。因此,.*連在一起就意味著任意數量的不包含換行的字元。現在\bhi\b.*\bLucy\b的意思就很明顯了:先是一個單詞hi,然後是任意個任一字元(但不能是換行),最後是Lucy這個單詞。
節選自:Regex30分鐘入門教程 http://deerchao.net/tutorials/regex/regex.htm
工具資料
下載Regex文檔 chm 版本 http://www.regexlab.com/download/?/deelx/deelx_zh.zip /Files/kiant71/DEELX_正則引擎文檔.rar
使用 Regex Match Tracer Web 版 http://www.regexlab.com/zh/mtracerweb.htm
JS 正則引擎測試 http://www.regexlab.com/zh/workshop.asp
JS 正則替換測試 http://www.regexlab.com/zh/replshop.asp
Regex30分鐘入門教程 http://deerchao.net/tutorials/regex/regex.htm
揭開Regex的神秘面紗 http://www.regexlab.com/zh/regref.htm
深入淺出之Regex(一) http://dragon.cnblogs.com/archive/2006/05/08/394078.html
深入淺出之Regex(二) http://www.cnblogs.com/dragon/archive/2006/05/09/394923.html
筆記:如何寫出高效率的Regex http://iregex.org/blog/regex-optimizing.html
常用Regex-月光部落格 http://www.williamlong.info/archives/433.html