" /> " />

亚洲Aⅴ无码Av红楼在线观看_国产午夜福利涩爱AⅤ_国产sm调教一区二区三区_精品人妻一区二区三区不卡毛片

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補(bǔ)償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

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

發(fā)布時間:  2012/8/13 13:50:46
 正則表達(dá)式廣泛出現(xiàn)在UNIX/Linux相關(guān)的各種領(lǐng)域和多種編程語言里。從常見的shell命令到大名鼎鼎的Perl語言再到當(dāng)前非常流行的PHP,它都扮演著一個重要的角色。甚至windows的命令行控制臺也支持正則表達(dá)式。如果你是一個Linux服務(wù)器管理員,你經(jīng)常會在一些服務(wù)器的設(shè)置腳本里看到它。

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

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

  正則表達(dá)式是英文“regular expressions”的譯文,它的產(chǎn)生據(jù)說可以追溯到“神經(jīng)網(wǎng)絡(luò)”等比較高深的理論。那么什么是正則表達(dá)式呢?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  \

  有數(shù)種用途的通用轉(zhuǎn)義符

  ^

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

  $

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

  .

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

  [

  字符類定義開始

  ]

  字符類定義結(jié)束

  |

  開始一個多選一的分支

  (

  子模式開始

  )

  子模式結(jié)束

  ?

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

  *

  匹配 0 個或多個的數(shù)量限定符

  +

  匹配 1 個或多個的數(shù)量限定符

  {

  最少/最多數(shù)量限定開始

  }

  最少/最多數(shù)量限定結(jié)束

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

  \

  通用轉(zhuǎn)義字符

  ^

  排除字符類,但僅當(dāng)其為第一個字符時有效

  -

  指出字符范圍

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

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

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

  反斜線的第三個用法是指定通用字符類型,這些字符類型序列可以出現(xiàn)在字符類之中和之外。每一個匹配相應(yīng)類型中的一個字符。如果當(dāng)前匹配點(diǎn)在目標(biāo)字符串的結(jié)尾,以上所有匹配都失敗,因?yàn)闆]有字符可供匹配。有以下這些常見的通用字符類:

  \d 任一十進(jìn)制數(shù)字

  \D任一非十進(jìn)制數(shù)的字符

  \s任一空白字符

  \S任一非空白字符

  \w任一“字”的字符

  \W任一“非字”的字符

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

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

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

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

  其它元字符我們會在以后的文章中結(jié)合相關(guān)內(nèi)容介紹。


本文出自:億恩科技【www.allwellnessguide.com】

服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時售后服務(wù)電話:0371-60135900
  • 虛擬主機(jī)/智能建站 24小時售后服務(wù)電話:0371-60135900
  • 專注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      1
     
     
     
     

    0371-60135900
    7*24小時客服服務(wù)熱線