咨詢電(diàn)話(huà):023-88959644    24小(xiǎo)時(shí)服務熱線:400-023-8809
NEWS CENTER ·
新聞動态
關注中技(jì)互聯 關注前沿

正則表達式

發表日期:2016-04-26    文章編輯:重慶網站(zhàn)制(zhì)作(zuò)小(xiǎo)編    浏覽次數(shù):15    标簽:

正則表達式:
       正則表達式,又稱正規表示法常規表示法(英語:Regular Expression,在代碼中常簡寫為(wèi)regex、regexp或RE),計(jì)算(suàn)機科學的一個(gè)概念。正則表達式使用單個(gè)字符串來(lái)描述、匹配一系列符合某個(gè)句法規則的字符串。在很(hěn)多(duō)文本編輯器(qì)裏,正則表達式通(tōng)常被用來(lái)檢索、替換那(nà)些(xiē)符合某個(gè)模式的文本。
許多(duō)程序設計(jì)語言都支持利用正則表達式進行(xíng)字符串操作(zuò)。例如,在Perl中就內(nèi)建了一個(gè)功能強大(dà)的正則表達式引擎。正則表達式這個(gè)概念最初是由Unix中的工具軟件(例如sed和(hé)grep)普及開(kāi)的。正則表達式通(tōng)常縮寫成“regex”,單數(shù)有(yǒu)regexp、regex,複數(shù)有(yǒu)regexps、regexes、regexen。
概念:
        正則表達式是對字符串操作(zuò)的一種邏輯公式,就是用事先定義好的一些(xiē)特定字符、及這些(xiē)特定字符的組合,組成一個(gè)“規則字符串”,這個(gè)“規則字符串”用來(lái)表達對字符串的一種過濾邏輯。
        給定一個(gè)正則表達式和(hé)另一個(gè)字符串,我們可(kě)以達到以下目的:
            (1)給定的字符串是否符全正則表達式的過濾邏輯(稱作(zuò)“匹配”);
            (2)可(kě)以通(tōng)過正則表達式,從字符串中獲取我們想要的特定部分。
特點:
       (1)靈活性、邏輯性和(hé)功能性非常強;
        (2)可(kě)以迅速地用極簡單的方式達到字符串的複雜控制(zhì);
        (3)對于剛接觸的人(rén)來(lái)說,比較晦澀難懂;
由于正則表達式主要應用對象是文本,因此它在各種文本編輯器(qì)場(chǎng)合都有(yǒu)應用,小(xiǎo)到著名編輯器(qì)EditPlus,大(dà)到Microsoft Word、Visual Studio等大(dà)型編輯器(qì),都可(kě)以使用正則表達式來(lái)處理(lǐ)文本內(nèi)容。
引擎:
         正則引擎主要可(kě)以分為(wèi)兩大(dà)類:一種是DFA,一種是NFA。這兩種引擎都有(yǒu)了很(hěn)久的曆史(至今二十多(duō)年),當中也由這兩種引擎産生(shēng)了很(hěn)多(duō)變體(tǐ)!于是POSIX的出台規避了不必要變體(tǐ)的繼續産生(shēng)。這樣一來(lái),主流的正則引擎又分為(wèi)3類:一、DFA,二、傳統型NFA,三、POSIX NFA。
符号:

元字符
描述
\
将下一個(gè)字符标記符、或一個(gè)向後引用、或一個(gè)八進制(zhì)轉義符。例如,“\\n”匹配\n。“\n”匹配換行(xíng)符。序列“\\”匹配“\”而“\(”則匹配“(”。即相當于多(duō)種編程語言中都有(yǒu)的“轉義字符”的概念。
^
匹配輸入字符串的開(kāi)始位置。如果設置了RegExp對象的Multiline屬性,^也匹配“\n”或“\r”之後的位置。
$
匹配輸入字符串的結束位置。如果設置了RegExp對象的Multiline屬性,$也匹配“\n”或“\r”之前的位置。
*
匹配前面的子表達式任意次。例如,zo*能匹配“z”,“zo”以及“zoo”,但(dàn)是不匹配“bo”。*等價于{0,}。
+
匹配前面的子表達式一次或多(duō)次(大(dà)于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但(dàn)不能匹配“z”。+等價于{1,}。
?
匹配前面的子表達式零次或一次。例如,“do(es)?”可(kě)以匹配“do”或“does”中的“do”。?等價于{0,1}。
{n}
n是一個(gè)非負整數(shù)。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但(dàn)是能匹配“food”中的兩個(gè)o。
{n,}
n是一個(gè)非負整數(shù)。至少(shǎo)匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但(dàn)能匹配“foooood”中的所有(yǒu)o。“o{1,}”等價于“o+”。“o{0,}”則等價于“o*”。
{n,m}
m和(hé)n均為(wèi)非負整數(shù),其中n<=m。最少(shǎo)匹配n次且最多(duō)匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三個(gè)o。“o{0,1}”等價于“o?”。請(qǐng)注意在逗号和(hé)兩個(gè)數(shù)之間(jiān)不能有(yǒu)空(kōng)格。
?
當該字符緊跟在任何一個(gè)其他限制(zhì)符(*,+,?,{n},{n,},{n,m})後面時(shí),匹配模式是非貪婪的。非貪婪模式盡可(kě)能少(shǎo)的匹配所搜索的字符串,而默認的貪婪模式則盡可(kě)能多(duō)的匹配所搜索的字符串。例如,對于字符串“oooo”,“o+?”将匹配單個(gè)“o”,而“o+”将匹配所有(yǒu)“o”。
.
匹配除“\r\n”之外的任何單個(gè)字符。要匹配包括“\r\n”在內(nèi)的任何字符,請(qǐng)使用像“[\s\S]”的模式。
(pattern)
匹配pattern并獲取這一匹配。所獲取的匹配可(kě)以從産生(shēng)的Matches集合得(de)到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括号字符,請(qǐng)使用“\(”或“\)”。
(?:pattern)
非獲取匹配,匹配pattern但(dàn)不獲取匹配結果,不進行(xíng)存儲供以後使用。這在使用或字符“(|)”來(lái)組合一個(gè)模式的各個(gè)部分是很(hěn)有(yǒu)用。例如“industr(?:y|ies)”就是一個(gè)比“industry|industries”更簡略的表達式。
(?=pattern)
非獲取匹配,正向肯定預查,在任何匹配pattern的字符串開(kāi)始處匹配查找字符串,該匹配不需要獲取供以後使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但(dàn)不能匹配“Windows3.1”中的“Windows”。預查不消耗字符,也就是說,在一個(gè)匹配發生(shēng)後,在最後一次匹配之後立即開(kāi)始下一次匹配的搜索,而不是從包含預查的字符之後開(kāi)始。
(?!pattern)
非獲取匹配,正向否定預查,在任何不匹配pattern的字符串開(kāi)始處匹配查找字符串,該匹配不需要獲取供以後使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但(dàn)不能匹配“Windows2000”中的“Windows”。
(?<=pattern)
非獲取匹配,反向肯定預查,與正向肯定預查類似,隻是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但(dàn)不能匹配“3.1Windows”中的“Windows”。
?<!pattern
非獲取匹配,反向否定預查,與正向否定預查類似,隻是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但(dàn)不能匹配“2000Windows”中的“Windows”。
x|y
匹配x或y。例如,“z|food”能匹配“z”或“food”(此處請(qǐng)謹慎)。“(z|f)ood”則匹配“zood”或“food”。
[xyz]
字符集合。匹配所包含的任意一個(gè)字符。例如,“[abc]”可(kě)以匹配“plain”中的“a”。
[^xyz]
負值字符集合。匹配未包含的任意字符。例如,“[^abc]”可(kě)以匹配“plain”中的“plin”。
[a-z]
字符範圍。匹配指定範圍內(nèi)的任意字符。例如,“[a-z]”可(kě)以匹配“a”到“z”範圍內(nèi)的任意小(xiǎo)寫字母字符。
注意:隻有(yǒu)連字符在字符組內(nèi)部時(shí),并且出現在兩個(gè)字符之間(jiān)時(shí),才能表示字符的範圍; 如果出字符組的開(kāi)頭,則隻能表示連字符本身.
[^a-z]
負值字符範圍。匹配任何不在指定範圍內(nèi)的任意字符。例如,“[^a-z]”可(kě)以匹配任何不在“a”到“z”範圍內(nèi)的任意字符。
\b
匹配一個(gè)單詞邊界,也就是指單詞和(hé)空(kōng)格間(jiān)的位置(即正則表達式的“匹配”有(yǒu)兩種概念,一種是匹配字符,一種是匹配位置,這裏的\b就是匹配位置的)。例如,“er\b”可(kě)以匹配“never”中的“er”,但(dàn)不能匹配“verb”中的“er”。
\B
匹配非單詞邊界。“er\B”能匹配“verb”中的“er”,但(dàn)不能匹配“never”中的“er”。
\cx
匹配由x指明(míng)的控制(zhì)字符。例如,\cM匹配一個(gè)Control-M或回車(chē)符。x的值必須為(wèi)A-Z或a-z之一。否則,将c視(shì)為(wèi)一個(gè)原義的“c”字符。
\d
匹配一個(gè)數(shù)字字符。等價于[0-9]。
\D
匹配一個(gè)非數(shù)字字符。等價于[^0-9]。
\f
匹配一個(gè)換頁符。等價于\x0c和(hé)\cL。
\n
匹配一個(gè)換行(xíng)符。等價于\x0a和(hé)\cJ。
\r
匹配一個(gè)回車(chē)符。等價于\x0d和(hé)\cM。
\s
匹配任何不可(kě)見字符,包括空(kōng)格、制(zhì)表符、換頁符等等。等價于[ \f\n\r\t\v]。
\S
匹配任何可(kě)見字符。等價于[^ \f\n\r\t\v]。
\t
匹配一個(gè)制(zhì)表符。等價于\x09和(hé)\cI。
\v
匹配一個(gè)垂直制(zhì)表符。等價于\x0b和(hé)\cK。
\w
匹配包括下劃線的任何單詞字符。類似但(dàn)不等價于“[A-Za-z0-9_]”,這裏的"單詞"字符使用Unicode字符集。
\W
匹配任何非單詞字符。等價于“[^A-Za-z0-9_]”。
\xn
匹配n,其中n為(wèi)十六進制(zhì)轉義值。十六進制(zhì)轉義值必須為(wèi)确定的兩個(gè)數(shù)字長。例如,“\x41”匹配“A”。“\x041”則等價于“\x04&1”。正則表達式中可(kě)以使用ASCII編碼。
\num
匹配num,其中num是一個(gè)正整數(shù)。對所獲取的匹配的引用。例如,“(.)\1”匹配兩個(gè)連續的相同字符。
\n
标識一個(gè)八進制(zhì)轉義值或一個(gè)向後引用。如果\n之前至少(shǎo)n個(gè)獲取的子表達式,則n為(wèi)向後引用。否則,如果n為(wèi)八進制(zhì)數(shù)字(0-7),則n為(wèi)一個(gè)八進制(zhì)轉義值。
\nm
标識一個(gè)八進制(zhì)轉義值或一個(gè)向後引用。如果\nm之前至少(shǎo)有(yǒu)nm個(gè)獲得(de)子表達式,則nm為(wèi)向後引用。如果\nm之前至少(shǎo)有(yǒu)n個(gè)獲取,則n為(wèi)一個(gè)後跟文字m的向後引用。如果前面的條件都不滿足,若n和(hé)m均為(wèi)八進制(zhì)數(shù)字(0-7),則\nm将匹配八進制(zhì)轉義值nm。
\nml
如果n為(wèi)八進制(zhì)數(shù)字(0-7),且m和(hé)l均為(wèi)八進制(zhì)數(shù)字(0-7),則匹配八進制(zhì)轉義值nml。
\un
匹配n,其中n是一個(gè)用四個(gè)十六進制(zhì)數(shù)字表示的Unicode字符。例如,\u00A9匹配版權符号(©)。
\p{P}
小(xiǎo)寫 p 是 property 的意思,表示 Unicode 屬性,用于 Unicode 正表達式的前綴。中括号內(nèi)的“P”表示Unicode 字符集七個(gè)字符屬性之一:标點字符。
其他六個(gè)屬性:
L:字母;
M:标記符号(一般不會(huì)單獨出現);
Z:分隔符(比如空(kōng)格、換行(xíng)等);
S:符号(比如數(shù)學符号、貨币符号等);
N:數(shù)字(比如阿拉伯數(shù)字、羅馬數(shù)字等);
C:其他字符。
*注:此語法部分語言不支持,例:javascript。
<>
匹配詞(word)的開(kāi)始(<)和(hé)結束(>)。例如正則表達式<the>能夠匹配字符串"for the wise"中的"the",但(dàn)是不能匹配字符串"otherwise"中的"the"。注意:這個(gè)元字符不是所有(yǒu)的軟件都支持的。
()
将( 和(hé) ) 之間(jiān)的表達式定義為(wèi)“組”(group),并且将匹配這個(gè)表達式的字符保存到一個(gè)臨時(shí)區(qū)域(一個(gè)正則表達式中最多(duō)可(kě)以保存9個(gè)),它們可(kě)以用 \1 到\9 的符号來(lái)引用。
|
将兩個(gè)匹配條件進行(xíng)邏輯“或”(Or)運算(suàn)。例如正則表達式(him|her) 匹配"it belongs to him"和(hé)"it belongs to her",但(dàn)是不能匹配"it belongs to them."。注意:這個(gè)元字符不是所有(yǒu)的軟件都支持的。
+
匹配1或多(duō)個(gè)正好在它之前的那(nà)個(gè)字符。例如正則表達式9+匹配9、99、999等。注意:這個(gè)元字符不是所有(yǒu)的軟件都支持的。
?
匹配0或1個(gè)正好在它之前的那(nà)個(gè)字符。注意:這個(gè)元字符不是所有(yǒu)的軟件都支持的。
{i},{i,j}
匹配指定數(shù)目的字符,這些(xiē)字符是在它之前的表達式定義的。例如正則表達式A[0-9]{3} 能夠匹配字符"A"後面跟着正好3個(gè)數(shù)字字符的串,例如A123、A348等,但(dàn)是不匹配A1234。而正則表達式[0-9]{4,6} 匹配連續的任意4個(gè)、5個(gè)或者6個(gè)數(shù)字
  本文由重慶網站(zhàn)制(zhì)作(zuò)-中技(jì)互聯:www.zjcoo.com
如沒特殊注明(míng),文章均為(wèi)中技(jì)互聯原創,轉載請(qǐng)注明(míng)來(lái)自www.zjcoo.com
相關新聞

CopyrightZJCOO technology Co., LTD. All Rights Reserved.    

渝ICP 備11003429号

  • qq客服
  • 公衆号
  • 手機版
  • 新浪微博