国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
正則表達(dá)式易錯(cuò)點(diǎn)小結(jié)!
目錄結(jié)構(gòu)

最近在學(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è)范圍,
1. 如果單獨(dú)的將“-”符號(hào)放在第一位的話(huà),它表示的也是一個(gè)普通的字符!例如:[a-z]這個(gè)時(shí)候就是元字符,代表的是一個(gè)范圍!
2. 在[-abc]中,"-"就是一個(gè)普通的字符,這句話(huà)就表示,匹配-、a、b、c中,這四個(gè)字符中的任意一個(gè)!

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

    <?php    $str =<<<STR        Iraq        Iraqian        miqra        qintar        aoph        zaqqnumSTR;    $reg = '/q[^udfg]/';    preg_match_all($reg, $str, $result);    var_dump($result);    運(yùn)行結(jié)果如下    array(1) { [0]=>array(5) { [0]=> string(2) "q " [1]=> string(2) "qi"[2]=> string(2) "qr" [3]=> string(2) "qi" [4]=>string(2) "qq" } }?>

曾經(jīng)好長(zhǎng)一段時(shí)間,我個(gè)人一直認(rèn)為,[^udfg]匹配的是除了udfg中的任何一個(gè)字符,但是,很明顯我錯(cuò)了! 通過(guò)上面我們對(duì)“[]”的了解,字符簇永遠(yuǎn)匹配的是一個(gè)字符!所以,他的正解應(yīng)該是,匹配除了字符u外的任意一個(gè)字符,或者dfg中的任何一個(gè)字符!
可能會(huì)有的朋友問(wèn)Iraq中q后面匹配了什么!答案是回車(chē)(在window狀態(tài)下是\r\n)!\r并不屬于u所以匹配成功!
在heredoc的語(yǔ)法中,會(huì)完整的保留空格、制表符、回車(chē)換行!

②“|”表示或的意思!它代表一個(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)一稱(chēng)為子表達(dá)式!而括號(hào)是能夠記憶“()”匹配到的內(nèi)容的,無(wú)論這些匹配到的文本是什么!(這個(gè)也就是我們常說(shuō)的反向引用!如果他是第一個(gè)的話(huà)使用\1,就可以獲得字表達(dá)式中的內(nèi)容!)
那么如果判斷是表達(dá)式幾呢?有一個(gè)原則:按照開(kāi)括號(hào)“(”從左到右的出現(xiàn)順序進(jìn)行計(jì)算!依次就是\1,\2,\3…… 注意:反向引用應(yīng)該是可以嵌套的!遵循的同樣是這個(gè)原則!看代碼:

<?php    $content = 'maweibin is the author';    $regexp = "/(((ma)wei)bin)/";    preg_match($regexp, $content, $result);    var_dump($result);    運(yùn)行結(jié)果如下:    array(4) { [0]=> 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ō)明:

<?php$str =<<<STRthe theorymy myselefyour yourselefSTR;$reg = '/^([a-zA-Z]+)\s*\1[a-zA-Z]*$/m';preg_match_all($reg, $str, $result);var_dump($result);運(yùn)行的結(jié)果如下array(2) { [0]=> array(1) { [0]=>string(14) "your yourselef" } [1]=> array(1) { [0]=> string(4)"your" } }?>

只有最后一個(gè)被匹配到了! 、
原因是這樣的!在window中每換一行會(huì)有隱藏字符“\r\n”存在!
$匹配\n前或字串結(jié)尾(字符串結(jié)尾,比如單獨(dú)一行的最后),\r 也是一個(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ō)明:<a href=’www.baidu.com’>百度</a><a href=’www.google.com’>谷歌</a>正則如下:<a\s*href\s*=\s*’www\.baidu\.com’>.*</a>結(jié)果是把全部的字符串都匹配到了!其實(shí),我們只需要加上U修飾符,這樣,這樣一旦成功匹配一次的話(huà),正則就不會(huì)繼續(xù)進(jìn)行匹配了!

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

⑦正則表達(dá)式是從左到右依次匹配的!這也是學(xué)習(xí)正則表達(dá)式要遵守的基本原則!

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
php_正則表達(dá)式_歡歡和芳芳的天空
Py之re:re正則表達(dá)式庫(kù)的簡(jiǎn)介、入門(mén)、使用方法之詳細(xì)攻略
正則表達(dá)式
JS正則表達(dá)式一條龍講解,從原理和語(yǔ)法到JS正則、ES6正則擴(kuò)展,最后再到正則實(shí)踐思路
php正則表達(dá)式的基本語(yǔ)法總結(jié)
WEB前端第三十九課——HTML正則表達(dá)式-基礎(chǔ)、修飾符、檢索模式
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服