自由,平等,開源,分享

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            2 Posts :: 61 Stories :: 3 Comments :: 0 Trackbacks

          Regular Mode & Behavior
          名稱 英文 字符/格式 描述



          元字符 Meta Character { } [ ] ( ) \ / ^ $ * + . , ? | : = ! - 元字符是正則表達(dá)式語法的一部分。任何時(shí)候要在正則表達(dá)式中使用這些元字符,都必須對它們進(jìn)行轉(zhuǎn)義,即其前加上反斜線。另外,在某些編程語言中,反斜線“\”通常用來進(jìn)行轉(zhuǎn)義操作,那么此時(shí)使用元字符時(shí),就要進(jìn)行雙重轉(zhuǎn)義,即先轉(zhuǎn)義反斜線再轉(zhuǎn)義元字符。
          特殊字符 Special Character \t \n \r \f \a \e \cX \B \V \0 通常是一些不可見的格式控制符號(hào),使用時(shí)也應(yīng)該注意雙重轉(zhuǎn)義。


          簡單類 Simple Class [...] 指定要包含的字符。
          負(fù)向類 Negation Class [^...] 指定要排除的字符。
          范圍類 Range Class [...-...] 指定要包含的字符有序序列。
          負(fù)向范圍類 Negative Range Class [^...-...] 指定要排除的字符有序序列。
          組合類 Combination Class 由幾種字符類組合而成的字符類(內(nèi)部類之間不能有空格)。組合類中允許出現(xiàn)簡單類、負(fù)向類、范圍類、預(yù)定義類。
          聯(lián)合類 Union Class
          交叉類 Intersection Class
          預(yù)定義類 Predefined Class . \d \D \s \S \w \W \xXX \XXX \uXXXX 某些反復(fù)用到的模式被預(yù)先定義,可以方便地指定復(fù)雜的模式,也使模式的匹配變得更簡單。

          量詞 Quantifier 用于指定某個(gè)特定模式出現(xiàn)的次數(shù)。當(dāng)指定某個(gè)模式應(yīng)當(dāng)出現(xiàn)的次數(shù)時(shí),可以指定硬性數(shù)量或指定軟性數(shù)量。量詞使用在某個(gè)模式的后面,用以限定該模式在字符串中出現(xiàn)的次數(shù)。
          貪婪(簡單)量詞 Greedy Quantifier ? * + {n} {n,m} {n,} 先看整個(gè)的字符串是不是一個(gè)匹配。如果沒有發(fā)現(xiàn)匹配,它去掉最后字符串中的最后一個(gè)字符,并再次嘗試。如果還是沒有發(fā)現(xiàn)匹配,那么再次去掉最后一字符,這個(gè)過程會(huì)一直重復(fù)直到發(fā)現(xiàn)一個(gè)匹配或者或者字符串不剩任何字符。
          惰性量詞 Inert Quantifier ?? *? +? {n}? {n,m}? {n,}? 先看字符串中第一個(gè)字符是不是一個(gè)匹配。如果單獨(dú)這一個(gè)字符還不夠,就讀入下一個(gè)字符,組成兩個(gè)字符的字符串。如果還是沒有發(fā)現(xiàn)匹配,惰性量詞繼續(xù)從字符串中添加字符直到發(fā)現(xiàn)一個(gè)匹配或者整個(gè)字符串都檢查過也沒有匹配。當(dāng)發(fā)現(xiàn)一個(gè)匹配后,忽略前面已經(jīng)匹配的字符串,接著從字符串的下一個(gè)字符開始進(jìn)行新的匹配檢查。惰性量詞和貪婪量詞的工作方式恰好相反。
          支配性量詞 Dominant Quantifier ?+ *+ ++ {n}+ {n,m}+ {n,}+ 嘗試匹配整個(gè)字符串。如果整個(gè)字符串不能產(chǎn)生匹配,不做進(jìn)一步嘗試。
          復(fù)



          (捕獲性)分組 Capture Group (...) 通過一系列圓括號(hào)包圍一系列字符、字符類以及量詞來使用。它可以處理特定的字符或字符序列的重復(fù)問題。通過混合使用字符、字符類和量詞,可以實(shí)現(xiàn)一些相當(dāng)復(fù)雜的分組,同時(shí)也不介意將分組放在分組間。
          反向引用 Back-Reference 每個(gè)捕獲性分組在使用后都被存放在一個(gè)特殊的地方以備將來使用,這些存儲(chǔ)在分組中的特殊值,叫做“反向引用”。反向引用是按照從左到右遇到的左圓括號(hào)字符的順序進(jìn)行創(chuàng)建和編號(hào)的。在正則表達(dá)式中,反向引用可以從構(gòu)造函數(shù)、轉(zhuǎn)義 \n、$n 等形式中獲取。
          非捕獲性分組 No-Capture Group (?:...) 只有捕獲性分組才能創(chuàng)建反向引用,非捕獲性分組無法創(chuàng)建。在較長的正則表達(dá)式中,存儲(chǔ)反向引用會(huì)降低匹配速度。通過使用非捕獲性分組,仍然可以擁有與匹配字符串序列同樣的能力,而無需存儲(chǔ)結(jié)果的開銷。非捕獲性分組不能使用任何形式的反向引用。
          候選 Candidate ...|... 候選項(xiàng)可以是任意多個(gè),在兩兩模式之間加上豎線,用于匹配可能的模式。

          前瞻 Look-Ahead 它告訴正則表達(dá)式運(yùn)算器向前看一些字符而不移動(dòng)其位置。前瞻會(huì)使用到圓括號(hào),但這不是分組,分組是不會(huì)考慮前瞻的存在(無論是正向還是負(fù)向)。若在分組中使用前瞻,無論是正向還是負(fù)向,都可以使用分組的反向引用,但該反向引用中并不包含前瞻模式串。
          正向前瞻 Forward Look-Ahead (?=...) 檢查的是接下來出現(xiàn)的是不是某個(gè)允許的特定字符集。
          負(fù)向前瞻 Negation Look-Ahead (?!...) 檢查的是接下來出現(xiàn)的是不是不應(yīng)該出現(xiàn)的特定字符集。
          后瞻 Look-Behind 匹配 b 當(dāng)且僅當(dāng)它前面沒有 a
          邊界 Boundary ^ $ \b \B 用于正則表達(dá)式中以表示模式的位置。
          多行模式 Multiline m (設(shè)置多行模式為 True) 只要在正則表達(dá)式中設(shè)置多行模式為 True 即可。它會(huì)讓 $ 邊界匹配換行符 \n 以及字符串真正的結(jié)尾。多行模式會(huì)讓 ^ 邊界匹配換行符之后的位置。

          Classic Regular Application
          名稱 變量 正則表達(dá)式

          礎(chǔ)

          英文字母 Character ^[A-Za-z]+$
          英文大寫字母 Lower-Char ^[A-Z]+$
          英文小寫字母 Upper-Char ^[a-z]+$
          字母和數(shù)字 Char-Int ^[A-Za-z0-9]+$
          整數(shù) Integer ^-?\d+$
          正整數(shù) SL-Int ^[0-9]*[1-9][0-9]*$
          非正整數(shù) NOT-SL-Int ^((-\d+)|(0+))$
          負(fù)整數(shù) NT-Int ^-[0-9]*[1-9][0-9]*$
          非負(fù)整數(shù) NOT-NT-Int ^\d+$
          浮點(diǎn)數(shù) Float-Num ^(-?\d+)(\.\d+)?$
          正浮點(diǎn)數(shù) SL-Float ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
          非正浮點(diǎn)數(shù) NOT-SL-Float ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
          負(fù)浮點(diǎn)數(shù) NT-Float ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
          非負(fù)浮點(diǎn)數(shù) NOT-NT-Float ^\d+(\.\d+)?$
          雙字節(jié)字符(包括中文) D-Byte-Char [^\x00-\xff]
          空行 Blank-Line \n\s*\r
          實(shí)

          應(yīng)
          電子郵件 E-mail ^([a-z0-9])(([\-.]|[_]+)?([a-z0-9]+))*(@)([a-z0-9])((([-]+)?([a-z0-9]+))?)*((.[a-z]{2,3})?(.[a-z]{2,6}))$
          網(wǎng)址 URL ^((https|http|ftp|rtsp|mms)://)(([0-9a-z_!~*’().&=+$%-]+: )?[0-9a-z_!~*’().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*’()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!~*’().;?:@&=+$,%#-]+)+/?)$
          IP 地址 IP ^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$
          身份證 ID-Card ^\d{15}|\d{18}$
          電話號(hào)碼 Phone ^\d+$
          郵政編碼 Zip-Code ^[1-9]\d{5}(?!\d)$
          金額 Money ^\d+\.\d{2}$
          帳號(hào) Account ^\w{6,15}$
          密碼 Password ^\w{6,15}$
          中文 Chinese [\u4e00-\u9fa5]
          日期(yyyy-mm-dd) Date ^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$
          日期時(shí)間(yyyy-mm-dd hh:mm:ss) DateTime ^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$

          Conception & History

          正則表達(dá)式 Regular Expression(regexp,regex,regxp),正規(guī)表達(dá)式,正規(guī)表示式,常規(guī)表達(dá)式,“模式”。
          正則表達(dá)式是指一個(gè)用來描述或者匹配一系列符合某個(gè)句法規(guī)則的字符串的單個(gè)字符串。

          最初的正則表達(dá)式出現(xiàn)于理論計(jì)算機(jī)科學(xué)的自動(dòng)控制理論和形式語言理論中。
          在這些領(lǐng)域中有對計(jì)算(自動(dòng)控制)的模型和對形式語言描述與分類的研究。
          1940 年代,Warren McCulloch 與 Walter Pitts 將神經(jīng)系統(tǒng)中的神經(jīng)元描述成小而簡單的自動(dòng)控制元。
          稍后,數(shù)學(xué)家 Stephen Kleene 利用稱之為正則集合的數(shù)學(xué)符號(hào)來描述此模型。
          Ken Thompson 將此符號(hào)系統(tǒng)引入編輯器 QED,然后是 Unix 上的編輯器 ed,并最終引入 grep。
          自此,正則表達(dá)式被廣泛地使用于各種 Unix 或者類似 Unix 的工具,例如 Perl。

          Quantifier
          貪婪(簡單)量詞 惰性量詞 支配性量詞 描述
          ? ?? ?+ 零次或一次出現(xiàn)
          * *? *+ 零次或多次出現(xiàn)
          + +? ++ 一次或多次出現(xiàn)
          {n} {n}? {n}+ 恰好 n 次出現(xiàn)
          {n,m} {n,m}? {n,m}+ 至少 n 次至多 m 次出現(xiàn)
          {n,} {n,}? {n,}+ 至少 n 次出現(xiàn)

          Meta Character
          字符 描述 字符 描述
          {} 花括號(hào) - 減號(hào)
          [] 方括號(hào) . 點(diǎn)號(hào)
          () 圓括號(hào) , 逗號(hào)
          \ 反斜線 ? 問號(hào)
          / 正斜線 | 豎線
          ^ 箭頭符號(hào) : 冒號(hào)
          $ 美圓符號(hào) = 等號(hào)
          * 星號(hào) ! 感嘆號(hào)
          + 加號(hào)

          Boundary

          字符 描述
          ^ 行開頭
          $ 行結(jié)尾
          \b 單詞的邊界
          \B 非單詞的邊界

          Predefined Class
          代碼 等同于 匹配
          . [^\n\r] 除了換行和回車之外的任意字符
          \d [0-9] 數(shù)字字符
          \D [^0-9] 非數(shù)字字符
          \s [ \t\n\x0B\f\r] 空白字符
          \S [^ \t\n\x0B\f\r] 非空白字符
          \w [a-zA-Z_0-9] 單詞字符(所有字母、數(shù)字和下劃線)
          \W [^a-zA-Z_0-9] 非單詞字符
          \xXX 十六進(jìn)制 ASCII 碼字符
          \XXX 八進(jìn)制 ASCII 碼字符
          \uXXXX 十六進(jìn)制 Unicode 碼字符

          Special Character
          字符 描述
          \t 制表符
          \n 換行符
          \r 回車符
          \f 換頁符
          \a alert 字符
          \e escape 字符
          \cX X 相對應(yīng)的控制字符
          \b 回退字符
          \v 垂直制表符
          \0 空字符

          Regular Precedence Level
          字符 描述 優(yōu)先級(jí)
          \ 轉(zhuǎn)義 1
          () (?:) (?=) [] 分組 2
          * + ? {n} {n,m} {n,} 量詞 3
          ^ $ \anymetacharacter 位置和順序 4
          | 候選 5
          注:從左至右求值。

          posted on 2008-04-07 23:22 龍震 閱讀(1896) 評論(0)  編輯  收藏 所屬分類: 參考
          主站蜘蛛池模板: 固始县| 岳阳市| 赤城县| 高州市| 滕州市| 金昌市| 依安县| 偃师市| 乐东| 博客| 调兵山市| 莱芜市| 石门县| 昭平县| 获嘉县| 苗栗市| 永寿县| 儋州市| 新津县| 咸丰县| 宁武县| 叶城县| 孝昌县| 蒙城县| 同德县| 叙永县| 林甸县| 稻城县| 平阴县| 依安县| 咸阳市| 鄂伦春自治旗| 新巴尔虎右旗| 姚安县| 肥乡县| 武乡县| 蒙城县| 监利县| 曲水县| 白朗县| 甘德县|