亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

正則表達(dá)式易錯(cuò)點(diǎn)小結(jié)!

邱勇 / 2594人閱讀

摘要:舉例說(shuō)明百度谷歌正則如下結(jié)果是把全部的字符串都匹配到了其實(shí),我們只需要加上修飾符,這樣,這樣一旦成功匹配一次的話,正則就不會(huì)繼續(xù)進(jìn)行匹配了個(gè)人認(rèn)為應(yīng)該是的意思,表示在匹配的時(shí)候忽略大小寫(xiě)。

最近在學(xué)習(xí)正則表達(dá)式,發(fā)現(xiàn)原來(lái)理解的正則表達(dá)式不是特別的準(zhǔn)確,甚至有誤!在這里簡(jiǎn)單記錄一下,希望對(duì)有的朋友能夠有所幫助!

①“[]”:字符集(字符簇,字符組……)
他的真正含義是"或"的意思!例如:[123],它代表的含義是,匹配一個(gè)1或2或3!

由于它經(jīng)常是用于匹配多個(gè)可能的值,所以支持一種簡(jiǎn)寫(xiě)的方式! 例如:[12345678]可以簡(jiǎn)寫(xiě)為[1-8]
[abcdefghjik]可以簡(jiǎn)寫(xiě)為[a-k] [1234567ABCDEFG]可以簡(jiǎn)寫(xiě)為[1-7A-G]

“[]”相關(guān)的陷阱!
(1)在”[]”中的大部分元字符都是普通字符,都不在具有元字符的含義!但是仍然有個(gè)別的元字符除外!
“-”,“^”,目前只知道這兩個(gè),可能還有其他的,待補(bǔ)充!

“-”,是作為連字符表示的是一個(gè)范圍,

如果多帶帶的將“-”符號(hào)放在第一位的話,它表示的也是一個(gè)普通的字符!例如:[a-z]這個(gè)時(shí)候就是元字符,代表的是一個(gè)范圍!

在[-abc]中,"-"就是一個(gè)普通的字符,這句話就表示,匹配-、a、b、c中,這四個(gè)字符中的任意一個(gè)!

^有兩個(gè)意思,

在字符簇外,它表示的是托字節(jié),匹配的是一個(gè)位置!

而在字符簇中相當(dāng)于取反的意思!而且只有當(dāng)托字節(jié)放在字符簇的第一個(gè)位置的時(shí)候才會(huì)表示一個(gè)元字符!

    array(5) { [0]=> string(2) "q " [1]=> string(2) "qi"[2]=> string(2) "qr" [3]=> string(2) "qi" [4]=>string(2) "qq" } }
?>
     
可能會(huì)有的朋友問(wèn)Iraq中q后面匹配了什么!答案是回車(在window狀態(tài)下是
)!
并不屬于udfg中的任意字符所以匹配成功!
在heredoc的語(yǔ)法中,會(huì)完整的保留空格、制表符、回車換行!
②“|”表示或的意思!它代表一個(gè)分支語(yǔ)句!
到這里,可能有的朋友會(huì)問(wèn),那他的功能豈不是和 ”[]” 的功能重復(fù)了么?

答案顯然是否定的!個(gè)人認(rèn)為“|”,分支語(yǔ)句,在一定程度上彌補(bǔ)了“[]”符號(hào)功能的不足!因?yàn)椤癧]”,自始至終只能表示一個(gè)字字符!

例如:[a-z],他表示的匹配a-z中的任意一個(gè)字符!

而當(dāng)我們需要匹配abc或def的時(shí)候,顯然”[]”是無(wú)能為力的!而此時(shí)也正是“|”分支結(jié)構(gòu)的用處!可以寫(xiě)成(abc|def)

表示匹配abc或者def這兩個(gè)字符集中的一個(gè)!

③“?”表示可選項(xiàng)!它只作用于之前緊鄰的元素!
這里我們需要明白一下元素的概念!所謂元素還包括如下的形式:[a-z]這個(gè)字符簇整體表示一個(gè)元素!(abc|def)這個(gè)分支結(jié)構(gòu)整體表示一個(gè)元素!
注意:所有的量詞都是僅作用于之前緊鄰的元素!
④正則中的反向引用
在正則表達(dá)式中,使用”()”包裹起來(lái)的元素被統(tǒng)一稱為子表達(dá)式!而括號(hào)是能夠記憶“()”匹配到的內(nèi)容的,無(wú)論這些匹配到的文本是什么!(這個(gè)也就是我們常說(shuō)的反向引用!如果他是第一個(gè)的話使用1,就可以獲得字表達(dá)式中的內(nèi)容!)
那么如果判斷是表達(dá)式幾呢?有一個(gè)原則:按照開(kāi)括號(hào)“(”從左到右的出現(xiàn)順序進(jìn)行計(jì)算!依次就是1,2,3…… 注意:反向引用應(yīng)該是可以嵌套的!遵循的同樣是這個(gè)原則!看代碼:
 string(8) "maweibin" [1]=> string(8) "maweibin" [2]=> string(5) "mawei" [3]=> string(2) "ma" } 
?>

通過(guò)結(jié)果,我們可以看到,第一個(gè)字表達(dá)式是“maweibin”,第二個(gè)字表達(dá)式是“mawei”,第三個(gè)字表達(dá)式是“ma”。
⑤正則表達(dá)式中的“$”陷阱!

在正則表達(dá)式中“$”符號(hào),同托字節(jié)“^”一樣是匹配一個(gè)位置的!但是“$”符號(hào)本身又有一些陷阱需要我們注意!
一般情況下,我們都認(rèn)為“$”符號(hào)匹配就是一行中的最后一個(gè)位置!這個(gè)并沒(méi)有錯(cuò),但是不夠詳細(xì)!
其實(shí)$匹配的是這樣一個(gè)位置,匹配n前或單行字串的結(jié)束位置,單行字符串結(jié)尾什么都沒(méi)有!舉例說(shuō)明:

 array(1) { [0]=>string(14) "your yourselef" } [1]=> array(1) { [0]=> string(4)"your" } }
?>
只有最后一個(gè)被匹配到了! 、
原因是這樣的!在window中每換一行會(huì)有隱藏字符“ ”存在!
$匹配 前或字串結(jié)尾(字符串結(jié)尾,比如多帶帶一行的最后), 也是一個(gè)字符,且不在[a-zA-Z]范圍!其實(shí),我們只需要將正則改寫(xiě)為"/^([a-zA-Z]+)s*1[a-zA-Z] s$/m",這里只是加上了一個(gè)s*用來(lái)匹配r這個(gè)看不見(jiàn)的字符串!
⑥關(guān)于正則表達(dá)在多行匹配中的應(yīng)用!

正則表達(dá)式大多數(shù)情況下是進(jìn)行單行的匹配的!但是,有時(shí)候我們也需要進(jìn)行多行的匹配,特別是在我們進(jìn)行信息采集的時(shí)候,顯得就尤為重要!
個(gè)人認(rèn)為,在php中如果我們能夠靈活的運(yùn)用php的模式修飾符,那么多行匹配就沒(méi)有什么問(wèn)題了!所以多行匹配,個(gè)人認(rèn)為就是重點(diǎn)對(duì)模式修飾符的學(xué)習(xí)!

(1)m(mutiline),加上了m修飾符號(hào)的主要作用是更改了托字節(jié)”^”和“$”的應(yīng)用范圍!
黑色箭頭代表的是托字節(jié)”^”所匹配的位置,藍(lán)色箭頭是美元符號(hào)”%”所匹配的位置! 舉例說(shuō)明:

從上面,我們可以看出來(lái):在沒(méi)有m修飾符的時(shí)候,托字節(jié)^僅匹配字符串的開(kāi)始位置,
而$僅匹配字符串的末尾,或者最后的換行符號(hào)!
加上了m修飾符之后:

從上面,我們可以看出來(lái):加上m修飾符后,托字節(jié)^會(huì)匹配目標(biāo)字符串的開(kāi)始,或者任意換行符n前面的位置; 而$會(huì)匹配目標(biāo)字符串的最末位置,或者任意換行符后面的位置!
(2)S修飾,如果設(shè)置了這個(gè)修飾符那么,模式中的元字符 “ . ” 就會(huì)匹配所有字符, 包含換行符. 如果沒(méi)有這個(gè)修飾符, 那么 “ . ”實(shí)際上匹配的是除了換行符n外的任意字符!

(3)U(這個(gè)是大寫(xiě)的ungreedy:非貪婪)。

舉例說(shuō)明:
百度谷歌
正則如下:.*結(jié)果是把全部的字符串都匹配到了!其實(shí),我們只需要加上U修飾符,這樣,這樣一旦成功匹配一次的話,正則就不會(huì)繼續(xù)進(jìn)行匹配了!

(4)i(個(gè)人認(rèn)為應(yīng)該是ingnore的意思),表示在匹配的時(shí)候忽略大小寫(xiě)。

⑦最左端文本優(yōu)先匹配 && 標(biāo)準(zhǔn)的匹配量詞是匹配優(yōu)先的

好抽象,還是舉個(gè)例子吧:

文本:this is March, March1998
正則:March[0-9]+
匹配過(guò)程:
1. 正則中的一個(gè)字符M從文本對(duì)最左面開(kāi)始嘗試匹配,發(fā)現(xiàn)第一個(gè)字符是t,并不匹配,換到下一個(gè)字符h仍不滿足,于是繼續(xù)下一個(gè)字符,直到遇到第一個(gè)大寫(xiě)字符M;
2. 正則中第二個(gè)字符a, 從M字符后面繼續(xù)開(kāi)始匹配,同樣滿足,于是r字符。就這樣,March單詞在文本中都得到了匹配。直到遇到了[0-9]+
3. 此時(shí),由于標(biāo)準(zhǔn)匹配量詞優(yōu)先原則,先檢測(cè)到了+, 聲明了在接下來(lái)對(duì)匹配中,前面對(duì)字符要嘗試匹配1次到任意對(duì)多次
4. 此時(shí),發(fā)現(xiàn) " , " 字符并不滿足數(shù)字至少出現(xiàn)一次對(duì)需求,所以本輪匹配失敗,接著來(lái)吧。
5. 接著字符 " , ", 接著往下匹配M字符不符合空格,接著下一個(gè)字符。發(fā)現(xiàn)M字符得到了匹配,緊接著a字符 r字符 c字符 h字符。此時(shí)接下來(lái)要執(zhí)行的步驟同步驟3一模一樣,這次得到了滿足。



![圖片上傳中...]

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/20723.html

相關(guān)文章

  • JavaScript:面試頻繁出現(xiàn)的幾個(gè)錯(cuò)點(diǎn)

    摘要:針對(duì)于面向?qū)ο缶幊痰?。因?yàn)槊嫦驅(qū)ο缶褪轻槍?duì)對(duì)象例子中的守候來(lái)進(jìn)行執(zhí)行某些動(dòng)作。這就是閉包的用途之一延續(xù)變量周期。把變量放在閉包里面和放在全局變量里面,影響是一致的。 1.前言 這段時(shí)間,金三銀四,很多人面試,很多人分享面試題。在前段時(shí)間,我也臨時(shí)擔(dān)任面試官,為了大概了解面試者的水平,我也寫(xiě)了一份題目,面試了幾個(gè)前端開(kāi)發(fā)者。在這段時(shí)間里面,我在學(xué),在寫(xiě)設(shè)計(jì)模式的一些知識(shí),想不到的設(shè)計(jì)模式...

    VincentFF 評(píng)論0 收藏0
  • forEach、map、filter、find、sort、some等錯(cuò)點(diǎn)整理

    摘要:最近手頭上做了一個(gè)很大的后臺(tái)管理項(xiàng)目,前端對(duì)復(fù)雜數(shù)據(jù)的處理要求頗高,也確實(shí)讓自己發(fā)現(xiàn)了很多之前被忽視的細(xì)節(jié)。鳴人佐助卡卡西佐助佐助佐助但是很遺憾及更早版本也不支持。 ??最近手頭上做了一個(gè)很大的后臺(tái)管理項(xiàng)目,前端對(duì)復(fù)雜數(shù)據(jù)的處理要求頗高,也確實(shí)讓自己發(fā)現(xiàn)了很多之前被忽視的細(xì)節(jié)。在此特整理出來(lái),希望不熟悉的朋友們們以后可以繞開(kāi)我踩的這些坑。本文初衷在于幫助大家梳理一些數(shù)組操作上的重點(diǎn)和易...

    AJie 評(píng)論0 收藏0
  • 指針?lè)矫嫦嚓P(guān)內(nèi)容,及其錯(cuò)點(diǎn)

    摘要:文章目錄前言一丶野指針指針的運(yùn)算指針整數(shù)指針指針指針的關(guān)系運(yùn)算二字符指針三指針數(shù)組與數(shù)組指針指針數(shù)組數(shù)組指針?biāo)臄?shù)組名與數(shù)組名五數(shù)組參數(shù)指針參數(shù)一維數(shù)組傳參二維數(shù)組傳參一級(jí)指針傳參二級(jí)指針傳參六丶函數(shù)指針函數(shù)指針即指 ...

    linkFly 評(píng)論0 收藏0
  • docker命令錯(cuò)點(diǎn)整理

    摘要:拷貝目錄的話,是拷貝目錄里頭的文件,不包括目錄本身原樣拷貝,不支持遠(yuǎn)程文件設(shè)置指令只能存在一個(gè),多個(gè)的話,執(zhí)行最后的那一個(gè)。設(shè)置鏡像的元屬性指定被其他鏡像作為基礎(chǔ)鏡像時(shí)運(yùn)行的操作指令指定確保服務(wù)出現(xiàn)任何問(wèn)題而意外結(jié)束時(shí),自動(dòng)重新啟動(dòng)。 pause docker pause可以暫時(shí)停止容器,以釋放一部分CPU出來(lái)給其他服務(wù)使用docker unpause可以解凍 docker stop ...

    YacaToy 評(píng)論0 收藏0
  • python 一些錯(cuò)點(diǎn)整理

    摘要:與比較中與比較關(guān)鍵字用來(lái)在函數(shù)或其他局部作用域中使用全局變量。親自動(dòng)手試后,發(fā)現(xiàn)使用了只會(huì)讀閉包內(nèi)的變量,可以隔著多層上一哥們類比看作為步驟 這篇文章是抄抄寫(xiě)寫(xiě)得來(lái)的,純粹是這個(gè)編輯器比筆記的好太多,才在這兒寫(xiě)。 函數(shù)參數(shù)傳遞 Python的函數(shù)參數(shù)傳遞 對(duì)于變量(與對(duì)象相對(duì)的概念),其實(shí),python函數(shù)參數(shù)傳遞可以理解為就是變量傳值操作,用C++的方式理解,就是對(duì)void*賦值。如...

    Lemon_95 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<