青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

教程精選:正則表達式快速入門(一)

作者:開心石頭
  正則表達式廣泛出現在UNIX/Linux相關的各種領域和多種編程語言里。從常見的shell命令到大名鼎鼎的Perl語言再到當前非常流行的PHP,它都扮演著一個重要的角色。甚至windows的命令行控制臺也支持正則表達式。如果你是一個Linux服務器管理員,你經常會在一些服務器的設置腳本里看到它。

  可以說,它是學好Linux/UNIX必需掌握的一個知識點,否則你連Linux的啟動腳本都讀不懂。偏偏它又的確有點晦澀難懂,而且相關的資料又大部分是英文,更為它的學習增加了幾多困難。即使有些中文的翻譯資料,不同的譯者對一些術語的譯法也五花八門,讀著讓人平添困惑。為此,我決定為它寫一個簡明教程,盡量可以覆蓋正則表達式涉及到的各主要概念。

  我并不想把本文寫成一本詳細的正則表達式語法手冊,事實上,這些手冊已經存在了,不過讀起來比較難懂。我希望的是在完成本教程后,你可以比較輕松的讀懂各種工具的正則表達式語法手冊并可以迅速上手,不過要用好正則表達式,可不是一篇短短的教程可以解決的,那是無數實踐練習的結果。但是,本文的最后一部分對于正則表達式的編寫提出了一些原則性的建議,學習一下這些正則表達式應用先驅者的經驗會讓我們在今后的實踐中少走一些彎路。

  正則表達式是英文“regular expressions”的譯文,它的產生據說可以追溯到“神經網絡”等比較高深的理論。那么什么是正則表達式呢?

  正則表達式是從左向右去匹配目標字符串的一組模式。大多數字符在模式中表示它們自身并匹配目標中相應的字符。舉個最簡單的例子,模式“The quick brown fox”匹配了目標字符串中與其完全相同的一部分。

  前面已經提過,正則表達式被許多植根于UNIX/Linux的工具采用,可是這些工具的正則表達式語法并不完全相同,它們中的一些對正則表達式語法的擴展并不被其它工具識別,這也為正則表達式的使用增加了難度。因此,當你在一個具體的環境中使用正則表達式時,你還要先看一下目標環境支持的語法范圍,以確保你的正則表達式被正確的解析。

  在本文中列舉的例子里,我們用正斜線“/”做為模式的定界符(delimiter),一個模式用下面這種格式表示:

/[A-Z]+(abc|xyz)*/i

  本文將較詳細的闡明下面這些正則表達式概念:模式修正符(modifier),元字符(Meta-characters),子模式(subpatterns)與逆向引用(Back references),重復(Repetition)和量詞(quantifiers),斷言(Assertions),注釋,正則表達式中的遞歸,最后我介紹一款方便學習正則表達式的工具并介紹一些正則表達式編寫的思路。

  正則表達式的模式修正符(modifier)

  正則表達式的模式修正符主要用來限定模式與目標字符串的匹配方式,例如是否需要大小寫敏感的匹配,是單行模式還是多行模式。修正符中的空格和換行被忽略,其它字符會導致錯誤。下面列舉一些常見的模式修正符。注意,模式修正符是區分大小寫的。

  i:非大小寫敏感模式,:如果設定此修正符,模式中的字符將同時匹配大小寫字母。

  m:多行模式,當設定了此修正符,“行起始”和“行結束”除了匹配整個字符串開頭和結束外,還分別匹配其中的換行符的之后和之前。

  s:單行模式,如果設定了此修正符,模式中的圓點元字符(.)匹配所有的字符,包括換行符。沒有此設定的話,則不包括換行符。

  對于多行模式和單行模式,一個容易讓初學者迷惑的地方是這兩者并不向字面上那樣是互斥的。事實上,它們只是分別定義了英文句點(.)、音調符(^)和美元符($)這三個元字符的匹配方式,因此,單行模式與多行模式的修正符可以同時使用。

  x:如果設定了此修正符,模式中的空白字符除了被轉義的或在字符類中的以外完全被忽略,在未轉義的字符類之外的 # 以及下一個換行符之間的所有字符,包括兩頭,也都被忽略。它使得可以在復雜的模式中加入注釋。我們會在后面的部分更詳細的講解正則表達中的注釋。

  模式修正符還有很多,這里不再一一列舉。我們會結合后面的內容介紹一些其它的模式修正符。不同的工具也可以添加自己的模式修正符,不過上面幾最為常見。

  模式修正符通常跟在模式定義結束符的后面,例如下面例子中模式最后的“i”字符。/[A-Z]+(abc|xyz)*/i,這時此修正符會對整個匹配模式起作用。模式修正符也可以在模式內部通過包含在 "(?" 和 ")" 之間的修正符字母序列來實現。例如,(?im) 設定了不區分大小寫,多行模式。也可以通過在字母前加上減號來取消這些選項。例如組合的選項 (?im-s),設定了不區分大小寫和多行模式,并取消了單行模式。如果一個字母在減號之前與之后都出現了,則該選項被取消設定。

  注意,如果(?im-s)出現在一個子模式內(被另一對小括號包含)會把模式修正符的作用局限在該子模式中。

  正則表達式的元字符(Meta-characters)

  正則表達式的威力在于其能夠在模式中包含選擇和循環。它們通過使用元字符來編碼在模式中,元字符不代表其自身,它們用一些特殊的方式來解析。

  有兩組不同的元字符:一種是模式中除了方括號內都能被識別的,還有一種是在方括號內被識別的。如果想在模式里包含一個元字符本身,就需要用到轉義符號,正則表達式常用反斜線“\”作為轉義字符使用,為了匹配“\”本身,你需要輸入兩個“\”,向這樣“\\”。當然,這個符號本身也是一個元字符。

  方括號之外的元字符有這些:

  \

  有數種用途的通用轉義符

  ^

  斷言目標的開頭(或在多行模式下行的開頭,即緊隨一換行符之后)

  $

  斷言目標的結尾(或在多行模式下行的結尾,即緊隨一換行符之前)

  .

  匹配除了換行符外的任意一個字符(默認情況下)

  [

  字符類定義開始

  ]

  字符類定義結束

  |

  開始一個多選一的分支

  (

  子模式開始

  )

  子模式結束

  ?

  擴展 ( 的含義,我們已經在介紹模式修正符里看到過它的使用。它也可以是 0 或 1 數量限定符,以及數量限定符最小值

  *

  匹配 0 個或多個的數量限定符

  +

  匹配 1 個或多個的數量限定符

  {

  最少/最多數量限定開始

  }

  最少/最多數量限定結束

  模式中方括號內的部分稱為“字符類”。字符類中可用的元字符為:

  \

  通用轉義字符

  ^

  排除字符類,但僅當其為第一個字符時有效

  -

  指出字符范圍

  在這里,最值得一提是“\”這個元字符。之所以重點對它進行講解是因為這一個元字符有多種不同的用法,在不同情況下代表不同的含義,而且使用頻率非常高,是個很容易讓人迷惑的地方。

  第一種用法前面我們已經提過,是作為通用轉義字符使用,如果其后跟著一個非字母數字字符,則取消該字符可能具有的任何特殊含義。此種將反斜線用作轉義字符的用法適用于無論是字符類之中還是之外。例如“\\”代表一個單獨的反斜線“\”。

  第二種用途提供了一種在模式中以可見方式去編碼不可打印字符的方法。模式中完全可以包括不可打印字符,除了代表模式結束的二進制零,例如,可以用“\a”代表alarm,即 BEL 字符(0x07),或用“\cx”代表"control-x",其中 x 是任意字符。當然,這種方法表示的不一定非得是不可打印字符,實際上,可以用“\xhh(十六進制代碼為 hh 的字符)”和“\ddd(八進制代碼為 ddd 的字符)”來以編碼的形式表達任何單字節字符,例如“\040”可以用來表示空格。

  反斜線的第三個用法是指定通用字符類型,這些字符類型序列可以出現在字符類之中和之外。每一個匹配相應類型中的一個字符。如果當前匹配點在目標字符串的結尾,以上所有匹配都失敗,因為沒有字符可供匹配。有以下這些常見的通用字符類:

  \d 任一十進制數字

  \D任一非十進制數的字符

  \s任一空白字符

  \S任一非空白字符

  \w任一“字”的字符

  \W任一“非字”的字符

  反斜線的第四個用法是某些簡單的斷言,關于斷言的討論我們放在后面,這里先不加討論。

  反斜線的最后一個用法是逆向引用。關于逆向引用,我們會在后面討論逆向引用的部分來做進一步的討論。

  我們已經看到,反斜線的眾多用法,其中一些涉及到了以后才講的內容。我們在模式中遇到反斜線時一定要注意它具體是哪一種用途以免疑惑。

  另外兩個方括號也是非常重要的元字符,左方括號開始了一個字符類,右方括號結束之。單獨一個右方括號不是特殊字符。字符類匹配目標中的一個字符,該字符必須是字符類定義的字符集中的一個;除非字符類中的第一個字符是音調符(^),此情況下目標字符必須不在字符類定義的字符集中。如果在字符類中需要音調符本身,則其必須不是第一個字符,或用反斜線轉義。例如,[^A-Z]表式非大寫字符。

  其它元字符我們會在以后的文章中結合相關內容介紹。

         未完待續

posted on 2007-04-22 17:10 PeakGao 閱讀(694) 評論(0)  編輯 收藏 引用 所屬分類: php

<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

導航

統計

常用鏈接

留言簿(9)

隨筆分類(67)

隨筆檔案(65)

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品分类| 蜜月aⅴ免费一区二区三区 | 亚洲自拍啪啪| 91久久中文字幕| 亚洲欧洲精品一区二区三区波多野1战4| 香蕉久久国产| 国产嫩草影院久久久久| 亚洲黄色在线视频| 亚洲三级电影在线观看| 国产精品稀缺呦系列在线| 日韩亚洲欧美成人| 亚洲一区在线视频| 国产欧美视频一区二区| 欧美xart系列高清| 欧美精品成人| 午夜激情综合网| 久久久精品国产免大香伊| 亚洲精选一区二区| 欧美激情第二页| 欧美午夜激情在线| 美日韩在线观看| 国产精品qvod| 久久精品人人做人人爽电影蜜月| 精品51国产黑色丝袜高跟鞋| 亚洲免费大片| 最新中文字幕一区二区三区| 亚洲一区二区三区在线播放| 亚洲人成人77777线观看| 欧美一区二区三区免费观看视频| 一本一本大道香蕉久在线精品| 欧美在线啊v一区| 亚洲视频在线一区| 久久久久久一区| 一区二区三区国产精华| 欧美成人在线网站| 欧美日韩一级大片网址| 久久精品综合一区| 国产亚洲欧美日韩美女| 一区二区三区偷拍| 亚洲精品欧美日韩专区| 亚洲天堂男人| 亚洲一区二区三区激情| 国产精品国产成人国产三级| 亚洲精品日韩在线观看| 中文欧美日韩| 欧美三区不卡| 亚洲一区二区三区四区五区午夜| 中日韩美女免费视频网站在线观看| 欧美一级一区| 男人天堂欧美日韩| 亚洲无吗在线| 韩国美女久久| 欧美日韩成人在线| 亚洲一区二区三区国产| 久久久免费精品| 亚洲素人一区二区| 狠狠色丁香婷综合久久| 欧美激情视频一区二区三区不卡| 亚洲一区二区高清| 亚洲高清资源综合久久精品| 亚洲欧美日韩一区二区三区在线观看 | 美日韩精品视频| 亚洲国产综合视频在线观看 | 亚洲一区激情| 国产精品热久久久久夜色精品三区| 久久大香伊蕉在人线观看热2| 亚洲精选大片| 欧美激情1区2区3区| 亚洲综合首页| 欧美日韩国产成人在线| 欧美在线观看一二区| 日韩一区二区高清| 亚洲国产免费| 亚洲人成网站777色婷婷| 美女免费视频一区| 蜜桃av一区二区| 欧美gay视频| 巨乳诱惑日韩免费av| 香蕉久久久久久久av网站| 亚洲小视频在线观看| 国产精品99久久99久久久二8 | 免费成人在线观看视频| 欧美不卡三区| 日韩视频免费在线| 一区二区电影免费在线观看| 艳女tv在线观看国产一区| 亚洲看片免费| 午夜精品国产| 欧美高清在线视频| 你懂的一区二区| 欧美另类变人与禽xxxxx| 久久国产精品第一页| 蜜月aⅴ免费一区二区三区 | 久久久人人人| 欧美+日本+国产+在线a∨观看| 久久久精品一区| 久久野战av| 99视频超级精品| 好吊日精品视频| 一区二区精品国产| 久久精品视频免费观看| 欧美大片一区二区| 午夜精品福利电影| 欧美三级第一页| 久久婷婷国产综合精品青草| 欧美寡妇偷汉性猛交| 韩国av一区二区三区在线观看| 日韩视频一区二区| 久久免费视频一区| 亚洲欧美清纯在线制服| 欧美日韩三区四区| 亚洲日本视频| 欧美韩日一区二区三区| 欧美一级欧美一级在线播放| 你懂的成人av| 99re视频这里只有精品| 老司机aⅴ在线精品导航| 一本色道久久加勒比精品| 嫩草影视亚洲| 亚洲三级免费| 亚洲欧洲精品一区二区| 欧美大片国产精品| 亚洲全黄一级网站| 亚洲成人在线网| 欧美专区一区二区三区| 国产精品色在线| 一区二区日韩伦理片| 亚洲精品一区二| 国产精品九九| 新片速递亚洲合集欧美合集| 一区二区日韩免费看| 国产精品推荐精品| 卡通动漫国产精品| 欧美激情乱人伦| 亚洲欧美日韩爽爽影院| 欧美一区二区三区喷汁尤物| 黄色成人在线网站| 亚洲欧洲一区二区在线观看 | 国产精品欧美久久| 久久激情综合网| 欧美成人精品福利| 午夜精品久久久久久| 欧美夜福利tv在线| 在线日韩av永久免费观看| 在线一区二区日韩| 亚洲第一免费播放区| 在线视频一区二区| 亚洲福利视频网站| 免费成人高清| 欧美性大战久久久久久久蜜臀| 久久精品99无色码中文字幕| 欧美成年人网站| 欧美中文日韩| 欧美日韩成人综合在线一区二区| 亚洲一区二区三区视频播放| 久久综合九色九九| 欧美主播一区二区三区| 欧美另类videos死尸| 亚洲国产一区二区a毛片| 国语自产偷拍精品视频偷| 亚洲一区在线直播| 亚洲欧美日韩一区二区三区在线 | 亚洲福利电影| 久久久久久亚洲精品中文字幕 | 欧美电影资源| 久久久亚洲精品一区二区三区| 国产精品久久久久久久9999| 欧美黄色一区| 日韩网站在线观看| 欧美日本三区| 亚洲综合电影一区二区三区| 欧美一区二区精美| 极品尤物av久久免费看| 久久久久久久久久久久久久一区| 久久久www免费人成黑人精品 | 国产精品一级在线| 久久久国产精品一区二区中文 | 亚洲欧洲日夜超级视频| 99re8这里有精品热视频免费 | 日韩视频专区| 一区二区三区高清| 午夜视频精品| 亚洲激情国产| 国产伦精品一区二区三区视频黑人| 久久国产精品亚洲va麻豆| 亚洲福利视频免费观看| 亚洲午夜精品国产| 亚洲国产精品一区二区第一页 | 亚洲国内自拍| 国产麻豆午夜三级精品| 欧美波霸影院| 久久精品国产69国产精品亚洲| 亚洲午夜一级| 亚洲美女精品久久| 亚洲激情在线观看| 最新国产精品拍自在线播放| 免费成人av资源网| 欧美激情在线免费观看| 欧美黄色免费| 亚洲精品视频一区|