關于正則表達式

          *匹配除了換行之外的所有字符

          合法IP的正則表達式 ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

          \s匹配任意的空白符、(空格、制表符、換行符、中文全角空格)
          \w匹配字母或數字或下劃線或漢字

          表1.常用的元字符
          代碼說明
          .匹配除換行符以外的任意字符
          \w匹配字母或數字或下劃線或漢字
          \s匹配任意的空白符
          \d匹配數字
          \b匹配單詞的開始或結束
          ^匹配字符串的開始
          $匹配字符串的結束


          表2.常用的限定符
          代碼/語法說明
          *重復零次或更多次
          +重復一次或更多次
          ?重復零次或一次
          {n}重復n次
          {n,}重復n次或更多次
          {n,m}重復n到m次


          后向引用

          使用小括號指定一個子表達式后,匹配這個子表達式的文本(也就是此分組捕獲的內容)可以在表達式或其它程序中作進一步的處理。默認情況下,每個分組會自動擁有一個組號,規則是:從左向右,以分組的左括號為標志,第一個出現的分組的組號為1,第二個為2,以此類推。

          后向引用用于重復搜索前面某個分組匹配的文本。例如,\1代表分組1匹配的文本。難以理解?請看示例:

          \b(\w+)\b\s+\1\b可以用來匹配重復的單詞,像go go, 或者kitty kitty。這個表達式首先是一個單詞,也就是單詞開始處和結束處之間的多于一個的字母或數字(\b(\w+)\b),這個單詞會被捕獲到編號為1的分組中,然后是1個或幾個空白符(\s+),最后是分組1中捕獲的內容(也就是前面匹配的那個單詞)(\1)。

          你也可以自己指定子表達式的組名。要指定一個子表達式的組名,請使用這樣的語法:(?<Word>\w+)(或者把尖括號換成'也行:(?'Word'\w+)),這樣就把\w+的組名指定為Word了。要反向引用這個分組捕獲的內容,你可以使用\k<Word>,所以上一個例子也可以寫成這樣:\b(?<Word>\w+)\b\s+\k<Word>\b

          使用小括號的時候,還有很多特定用途的語法。下面列出了最常用的一些:

          表4.常用分組語法
          分類代碼/語法說明
          捕獲(exp)匹配exp,并捕獲文本到自動命名的組里
          (?<name>exp)匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp)
          (?:exp)匹配exp,不捕獲匹配的文本,也不給此分組分配組號
          零寬斷言(?=exp)匹配exp前面的位置
          (?<=exp)匹配exp后面的位置
          (?!exp)匹配后面跟的不是exp的位置
          (?<!exp)匹配前面不是exp的位置
          注釋(?#comment)這種類型的分組不對正則表達式的處理產生任何影響,用于提供注釋讓人閱讀


          表5.懶惰限定符
          代碼/語法說明
          *?重復任意次,但盡可能少重復
          +?重復1次或更多次,但盡可能少重復
          ??重復0次或1次,但盡可能少重復
          {n,m}?重復n到m次,但盡可能少重復
          {n,}?重復n次以上,但盡可能少重復


          表6.常用的處理選項
          名稱說明
          IgnoreCase(忽略大小寫)匹配時不區分大小寫。
          Multiline(多行模式)更改^$的含義,使它們分別在任意一行的行首和行尾匹配,而不僅僅在整個字符串的開頭和結尾匹配。(在此模式下,$的精確含意是:匹配\n之前的位置以及字符串結束前的位置.)
          Singleline(單行模式)更改.的含義,使它與每一個字符匹配(包括換行符\n)。
          IgnorePatternWhitespace(忽略空白)忽略表達式中的非轉義空白并啟用由#標記的注釋。
          RightToLeft(從右向左查找)匹配從右向左而不是從左向右進行。
          ExplicitCapture(顯式捕獲)僅捕獲已被顯式命名的組。
          ECMAScript(JavaScript兼容模式)使表達式的行為與它在JavaScript里的行為一致。
          表7.尚未詳細討論的語法
          代碼/語法說明
          \a報警字符(打印它的效果是電腦嘀一聲)
          \b通常是單詞分界位置,但如果在字符類里使用代表退格
          \t制表符,Tab
          \r回車
          \v豎向制表符
          \f換頁符
          \n換行符
          \eEscape
          \0nnASCII代碼中八進制代碼為nn的字符
          \xnnASCII代碼中十六進制代碼為nn的字符
          \unnnnUnicode代碼中十六進制代碼為nnnn的字符
          \cNASCII控制字符。比如\cC代表Ctrl+C
          \A字符串開頭(類似^,但不受處理多行選項的影響)
          \Z字符串結尾或行尾(不受處理多行選項的影響)
          \z字符串結尾(類似$,但不受處理多行選項的影響)
          \G當前搜索的開頭
          \p{name}Unicode中命名為name的字符類,例如\p{IsGreek}
          (?>exp)貪婪子表達式
          (?<x>-<y>exp)平衡組
          (?im-nsx:exp)在子表達式exp中改變處理選項
          (?im-nsx)為表達式后面的部分改變處理選項
          (?(exp)yes|no)把exp當作零寬正向先行斷言,如果在這個位置能匹配,使用yes作為此組的表達式;否則使用no
          (?(exp)yes)同上,只是使用空表達式作為no
          (?(name)yes|no)如果命名為name的組捕獲到了內容,使用yes作為表達式;否則使用no
          (?(name)yes)同上,只是使用空表達式作為no

          posted on 2008-10-17 11:10 金家寶 閱讀(331) 評論(1)  編輯  收藏

          評論

          # re: 關于正則表達式 2008-10-17 17:49 Jiabao

          請教一個正則:我想在字符串:abc123abcdefabc1234defabc123def中找出
          以abc開始def結尾且包含123又不包含4及abc的字符串  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 锡林郭勒盟| 金华市| 松溪县| 托克逊县| 兴隆县| 仪征市| 沂源县| 延庆县| 金川县| 兴业县| 贡山| 丹棱县| 手机| 恩施市| 合肥市| 枞阳县| 武鸣县| 东阿县| 北安市| 南靖县| 蒙阴县| 集贤县| 洮南市| 哈密市| 平塘县| 福安市| 桃园县| 重庆市| 垫江县| 大安市| 中西区| 昌乐县| 佛冈县| 怀柔区| 若尔盖县| 漳平市| 增城市| 华亭县| 营口市| 美姑县| 和静县|